{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "# 神经网络\n",
    "## 全连接层\n",
    "### 张量方式实现"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import tensorflow as tf\n",
    "from matplotlib import pyplot as plt\n",
    "plt.rcParams['font.size'] = 16\n",
    "plt.rcParams['font.family'] = ['STKaiti']\n",
    "plt.rcParams['axes.unicode_minus'] = False"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=32, shape=(2, 256), dtype=float32, numpy=\n",
       "array([[1.4457572e-01, 0.0000000e+00, 0.0000000e+00, 1.5885776e+00,\n",
       "        1.0439749e+00, 7.7912319e-01, 0.0000000e+00, 1.3450572e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 4.3180938e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 4.1043224e+00, 3.6832197e+00, 2.0345888e+00,\n",
       "        0.0000000e+00, 2.4156928e+00, 6.2482119e-01, 2.1313906e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 2.8110793e+00, 1.2761320e+00,\n",
       "        3.3316123e-01, 0.0000000e+00, 0.0000000e+00, 4.0703683e+00,\n",
       "        3.6970644e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 5.1246948e+00, 4.4117540e-01, 2.8882909e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 9.7089911e-01, 3.3954732e+00,\n",
       "        4.1278057e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 5.7234616e+00, 8.6819875e-01, 2.2879472e+00,\n",
       "        0.0000000e+00, 2.2198222e+00, 0.0000000e+00, 3.1001923e+00,\n",
       "        1.1919616e+00, 3.3295627e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 3.5908163e+00, 3.0272570e+00, 1.6754341e-01,\n",
       "        1.0535609e+00, 4.3685951e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 1.5276419e+00, 0.0000000e+00, 1.6658249e+00,\n",
       "        3.0669322e+00, 0.0000000e+00, 0.0000000e+00, 2.0797521e-01,\n",
       "        0.0000000e+00, 0.0000000e+00, 1.2374279e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 5.3036184e+00,\n",
       "        0.0000000e+00, 1.7677846e+00, 0.0000000e+00, 5.4665799e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 5.2840624e+00,\n",
       "        0.0000000e+00, 1.3125762e+00, 1.0423661e+00, 0.0000000e+00,\n",
       "        2.8083522e+00, 0.0000000e+00, 1.4011757e+00, 0.0000000e+00,\n",
       "        1.7042743e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 1.1773186e+00, 0.0000000e+00, 2.1219215e+00,\n",
       "        1.7009761e+00, 6.7060477e-01, 0.0000000e+00, 1.0148914e+00,\n",
       "        1.5465360e+00, 2.7701919e+00, 2.0300136e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        5.5319033e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 2.2194433e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 5.2075720e-01, 0.0000000e+00,\n",
       "        1.0547297e+00, 1.8048855e+00, 1.0783756e-01, 0.0000000e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 3.4681163e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 1.3255672e+00, 6.6420907e-01, 0.0000000e+00,\n",
       "        7.7916873e-01, 0.0000000e+00, 3.0769658e+00, 1.3348627e+00,\n",
       "        3.6879034e+00, 1.9871511e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        1.7444913e+00, 3.4223928e+00, 3.0347914e-01, 0.0000000e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 1.7596745e+00, 2.4907162e+00,\n",
       "        3.0627418e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 3.2861500e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 3.9055758e+00, 1.0461342e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 1.5456775e+00, 7.8033966e-01,\n",
       "        8.3895838e-01, 0.0000000e+00, 0.0000000e+00, 2.2837987e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 5.5422187e-03, 1.1403859e-01,\n",
       "        0.0000000e+00, 1.2095433e+00, 1.7129575e+00, 1.6419575e+00,\n",
       "        4.4684267e-01, 5.1872027e-01, 2.1097169e+00, 1.5454488e+00,\n",
       "        2.3979876e+00, 0.0000000e+00, 9.4418621e-01, 6.9402461e+00,\n",
       "        0.0000000e+00, 1.1125100e+00, 1.2111367e+00, 0.0000000e+00,\n",
       "        1.8309177e+00, 2.0388236e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 1.0941027e+00, 1.8273660e+00, 1.9182837e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 5.3054829e+00,\n",
       "        0.0000000e+00, 3.0004754e+00, 2.7474165e+00, 0.0000000e+00,\n",
       "        1.3111091e+00, 2.2261970e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        9.9181747e-01, 3.6140809e+00, 1.9993970e+00, 4.7401142e+00,\n",
       "        0.0000000e+00, 8.1009042e-01, 0.0000000e+00, 2.5986152e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        5.0805168e+00, 3.8091679e+00, 5.7832909e-01, 3.5714302e+00,\n",
       "        4.2079430e+00, 1.5617929e+00, 5.1026669e+00, 6.5857297e-01,\n",
       "        1.8174318e+00, 2.4871097e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 9.2392981e-01, 0.0000000e+00,\n",
       "        4.3760085e+00, 0.0000000e+00, 0.0000000e+00, 1.5075514e+00],\n",
       "       [8.7832201e-01, 0.0000000e+00, 0.0000000e+00, 9.1710794e-01,\n",
       "        1.5630457e+00, 0.0000000e+00, 2.2782421e-01, 5.9972242e-02,\n",
       "        0.0000000e+00, 0.0000000e+00, 1.4565945e-02, 0.0000000e+00,\n",
       "        4.1295848e+00, 2.7470212e+00, 9.7948509e-01, 0.0000000e+00,\n",
       "        3.3151944e+00, 1.8512800e+00, 1.3619306e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 8.9752936e-01, 7.5278872e-01, 0.0000000e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 1.0337144e+00,\n",
       "        0.0000000e+00, 5.1528068e+00, 2.3917878e+00, 4.3787770e+00,\n",
       "        0.0000000e+00, 1.5585386e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        7.5307465e-01, 1.5129611e-01, 0.0000000e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 2.8983312e+00, 1.9024457e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 3.0917478e-01, 0.0000000e+00,\n",
       "        6.5598363e-01, 0.0000000e+00, 2.1112294e+00, 2.5924401e+00,\n",
       "        3.3948598e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 4.4281859e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        4.4698329e+00, 3.2444415e+00, 1.9391026e+00, 1.6628875e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 4.5874354e-01, 2.3167276e-01,\n",
       "        0.0000000e+00, 0.0000000e+00, 1.3781320e+00, 3.9873242e+00,\n",
       "        3.1230459e+00, 0.0000000e+00, 1.6772239e+00, 0.0000000e+00,\n",
       "        5.6948298e-01, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        1.0610836e+00, 0.0000000e+00, 1.6360415e+00, 1.6136130e+00,\n",
       "        1.6715432e+00, 0.0000000e+00, 5.5681950e-01, 2.2155418e+00,\n",
       "        3.6776289e-01, 2.1361184e+00, 3.6108749e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 2.6568766e+00,\n",
       "        0.0000000e+00, 2.2606027e+00, 2.1168242e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 1.8528820e+00, 5.8745193e-01, 1.4070964e-01,\n",
       "        0.0000000e+00, 9.7248316e-01, 0.0000000e+00, 4.0289736e+00,\n",
       "        0.0000000e+00, 3.4026903e-01, 0.0000000e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 5.4798675e-01,\n",
       "        2.0467963e+00, 1.6678374e+00, 0.0000000e+00, 9.9849379e-01,\n",
       "        0.0000000e+00, 1.5834469e-01, 1.3633517e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        2.2913544e+00, 0.0000000e+00, 0.0000000e+00, 3.9285338e-01,\n",
       "        0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 6.2841415e-01,\n",
       "        0.0000000e+00, 1.4563254e+00, 0.0000000e+00, 5.5986887e-01,\n",
       "        0.0000000e+00, 1.4578068e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 2.5412967e+00,\n",
       "        5.0054140e+00, 0.0000000e+00, 1.7242203e+00, 1.3499653e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 1.0508972e+00, 4.4391817e-01, 4.3264878e-01,\n",
       "        2.1464529e+00, 0.0000000e+00, 2.8329771e+00, 3.8421059e+00,\n",
       "        2.2088094e+00, 0.0000000e+00, 1.4398234e+00, 3.2789762e+00,\n",
       "        0.0000000e+00, 1.0888265e+00, 2.7165384e+00, 1.2394415e-01,\n",
       "        1.0367149e+00, 2.6919603e+00, 5.3468841e-01, 0.0000000e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 2.3063517e+00, 3.8659568e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 9.8905158e-01, 5.2594888e-01,\n",
       "        6.5768600e-01, 3.9560888e+00, 8.4054255e-01, 5.3066432e-01,\n",
       "        3.9229577e+00, 3.6988783e+00, 6.9477425e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 3.8620110e+00, 1.0070596e+00,\n",
       "        0.0000000e+00, 5.2309918e-01, 0.0000000e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        3.0635428e+00, 3.1577382e+00, 0.0000000e+00, 7.3853290e-01,\n",
       "        4.9755821e+00, 9.7593963e-01, 0.0000000e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 1.3546337e+00, 0.0000000e+00,\n",
       "        3.5712800e+00, 2.3364487e+00, 1.2819785e-01, 1.4282907e+00,\n",
       "        0.0000000e+00, 1.1326282e+00, 1.3802602e+00, 3.9922757e+00,\n",
       "        1.3481843e+00, 1.1615274e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 1.1572182e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 3.2973570e-01, 1.5644734e+00,\n",
       "        0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 7.2466010e-01,\n",
       "        0.0000000e+00, 1.8030484e+00, 0.0000000e+00, 0.0000000e+00,\n",
       "        0.0000000e+00, 1.9469011e+00, 2.8017514e+00, 2.0590529e+00]],\n",
       "      dtype=float32)>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 创建 W,b 张量\n",
    "x = tf.random.normal([2,784])\n",
    "w1 = tf.Variable(tf.random.truncated_normal([784, 256], stddev=0.1))\n",
    "b1 = tf.Variable(tf.zeros([256]))\n",
    "# 线性变换\n",
    "o1 = tf.matmul(x,w1) + b1 \n",
    "# 激活函数\n",
    "o1 = tf.nn.relu(o1) \n",
    "o1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 层方式实现"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=65, shape=(4, 512), dtype=float32, numpy=\n",
       "array([[0.30526173, 1.4002054 , 0.        , ..., 0.        , 0.        ,\n",
       "        0.        ],\n",
       "       [0.        , 0.14786741, 1.9189566 , ..., 0.        , 0.        ,\n",
       "        1.9087815 ],\n",
       "       [2.654635  , 0.        , 1.280081  , ..., 0.        , 0.42551   ,\n",
       "        1.1506792 ],\n",
       "       [0.        , 0.        , 0.        , ..., 0.01546198, 0.        ,\n",
       "        0.        ]], dtype=float32)>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = tf.random.normal([4,28*28])\n",
    "# 导入层模块\n",
    "from tensorflow.keras import layers \n",
    "# 创建全连接层，指定输出节点数和激活函数\n",
    "fc = layers.Dense(512, activation=tf.nn.relu)\n",
    "# 通过 fc 类实例完成一次全连接层的计算，返回输出张量\n",
    "h1 = fc(x) \n",
    "h1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上述通过一行代码即可以创建一层全连接层 fc， 并指定输出节点数为 512， 输入的节点数在fc(x)计算时自动获取， 并创建内部权值张量$W$和偏置张量$\\mathbf{b}$。 我们可以通过类内部的成员名 kernel 和 bias 来获取权值张量$W$和偏置张量$\\mathbf{b}$对象"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Variable 'dense/kernel:0' shape=(784, 512) dtype=float32, numpy=\n",
       "array([[ 0.06673512, -0.02965283,  0.00828745, ...,  0.06302126,\n",
       "        -0.00772014, -0.05110519],\n",
       "       [-0.01418904,  0.04908816, -0.02749477, ...,  0.05126443,\n",
       "        -0.03161873,  0.05034576],\n",
       "       [-0.05878403, -0.00868686,  0.0597257 , ...,  0.0382687 ,\n",
       "        -0.0149098 ,  0.05203287],\n",
       "       ...,\n",
       "       [ 0.00840023,  0.04076394, -0.00407338, ...,  0.04379862,\n",
       "         0.01195769, -0.01303417],\n",
       "       [ 0.02782042, -0.02848876,  0.062751  , ..., -0.04502054,\n",
       "        -0.05900744,  0.0626393 ],\n",
       "       [ 0.01346859,  0.05516848, -0.00456174, ...,  0.05716816,\n",
       "        -0.05639091, -0.0405523 ]], dtype=float32)>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 获取 Dense 类的权值矩阵\n",
    "fc.kernel "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Variable 'dense/bias:0' shape=(512,) dtype=float32, numpy=\n",
       "array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0.], dtype=float32)>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 获取 Dense 类的偏置向量\n",
    "fc.bias "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<tf.Variable 'dense/kernel:0' shape=(784, 512) dtype=float32, numpy=\n",
       " array([[ 0.06673512, -0.02965283,  0.00828745, ...,  0.06302126,\n",
       "         -0.00772014, -0.05110519],\n",
       "        [-0.01418904,  0.04908816, -0.02749477, ...,  0.05126443,\n",
       "         -0.03161873,  0.05034576],\n",
       "        [-0.05878403, -0.00868686,  0.0597257 , ...,  0.0382687 ,\n",
       "         -0.0149098 ,  0.05203287],\n",
       "        ...,\n",
       "        [ 0.00840023,  0.04076394, -0.00407338, ...,  0.04379862,\n",
       "          0.01195769, -0.01303417],\n",
       "        [ 0.02782042, -0.02848876,  0.062751  , ..., -0.04502054,\n",
       "         -0.05900744,  0.0626393 ],\n",
       "        [ 0.01346859,  0.05516848, -0.00456174, ...,  0.05716816,\n",
       "         -0.05639091, -0.0405523 ]], dtype=float32)>,\n",
       " <tf.Variable 'dense/bias:0' shape=(512,) dtype=float32, numpy=\n",
       " array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0.], dtype=float32)>]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 待优化参数列表\n",
    "fc.trainable_variables"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<tf.Variable 'dense/kernel:0' shape=(784, 512) dtype=float32, numpy=\n",
       " array([[ 0.06673512, -0.02965283,  0.00828745, ...,  0.06302126,\n",
       "         -0.00772014, -0.05110519],\n",
       "        [-0.01418904,  0.04908816, -0.02749477, ...,  0.05126443,\n",
       "         -0.03161873,  0.05034576],\n",
       "        [-0.05878403, -0.00868686,  0.0597257 , ...,  0.0382687 ,\n",
       "         -0.0149098 ,  0.05203287],\n",
       "        ...,\n",
       "        [ 0.00840023,  0.04076394, -0.00407338, ...,  0.04379862,\n",
       "          0.01195769, -0.01303417],\n",
       "        [ 0.02782042, -0.02848876,  0.062751  , ..., -0.04502054,\n",
       "         -0.05900744,  0.0626393 ],\n",
       "        [ 0.01346859,  0.05516848, -0.00456174, ...,  0.05716816,\n",
       "         -0.05639091, -0.0405523 ]], dtype=float32)>,\n",
       " <tf.Variable 'dense/bias:0' shape=(512,) dtype=float32, numpy=\n",
       " array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "        0., 0.], dtype=float32)>]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 返回所有参数列表\n",
    "fc.variables "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 神经网络\n",
    "### 张量方式实现"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 隐藏层 1 张量\n",
    "w1 = tf.Variable(tf.random.truncated_normal([784, 256], stddev=0.1))\n",
    "b1 = tf.Variable(tf.zeros([256]))\n",
    "# 隐藏层 2 张量\n",
    "w2 = tf.Variable(tf.random.truncated_normal([256, 128], stddev=0.1))\n",
    "b2 = tf.Variable(tf.zeros([128]))\n",
    "# 隐藏层 3 张量\n",
    "w3 = tf.Variable(tf.random.truncated_normal([128, 64], stddev=0.1))\n",
    "b3 = tf.Variable(tf.zeros([64]))\n",
    "# 输出层张量\n",
    "w4 = tf.Variable(tf.random.truncated_normal([64, 10], stddev=0.1))\n",
    "b4 = tf.Variable(tf.zeros([10]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "with tf.GradientTape() as tape: # 梯度记录器\n",
    "    # x: [b, 28*28]\n",
    "    # 隐藏层 1 前向计算， [b, 28*28] => [b, 256]\n",
    "    h1 = x@w1 + tf.broadcast_to(b1, [x.shape[0], 256])\n",
    "    h1 = tf.nn.relu(h1)\n",
    "    # 隐藏层 2 前向计算， [b, 256] => [b, 128]\n",
    "    h2 = h1@w2 + b2\n",
    "    h2 = tf.nn.relu(h2)\n",
    "    # 隐藏层 3 前向计算， [b, 128] => [b, 64]\n",
    "    h3 = h2@w3 + b3\n",
    "    h3 = tf.nn.relu(h3)\n",
    "    # 输出层前向计算， [b, 64] => [b, 10]\n",
    "    h4 = h3@w4 + b4"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 层方式实现"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 导入常用网络层 layers\n",
    "from tensorflow.keras import layers,Sequential\n",
    "# 隐藏层 1\n",
    "fc1 = layers.Dense(256, activation=tf.nn.relu) \n",
    "# 隐藏层 2\n",
    "fc2 = layers.Dense(128, activation=tf.nn.relu) \n",
    "# 隐藏层 3\n",
    "fc3 = layers.Dense(64, activation=tf.nn.relu) \n",
    "# 输出层\n",
    "fc4 = layers.Dense(10, activation=None) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = tf.random.normal([4,28*28])\n",
    "# 通过隐藏层 1 得到输出\n",
    "h1 = fc1(x) \n",
    "# 通过隐藏层 2 得到输出\n",
    "h2 = fc2(h1) \n",
    "# 通过隐藏层 3 得到输出\n",
    "h3 = fc3(h2) \n",
    "# 通过输出层得到网络输出\n",
    "h4 = fc4(h3) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对于这种数据依次向前传播的网络， 也可以通过 Sequential 容器封装成一个网络大类对象，调用大类的前向计算函数一次即可完成所有层的前向计算，使用起来更加方便。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 导入 Sequential 容器\n",
    "from tensorflow.keras import layers,Sequential\n",
    "# 通过 Sequential 容器封装为一个网络类\n",
    "model = Sequential([\n",
    "    layers.Dense(256, activation=tf.nn.relu) , # 创建隐藏层 1\n",
    "    layers.Dense(128, activation=tf.nn.relu) , # 创建隐藏层 2\n",
    "    layers.Dense(64, activation=tf.nn.relu) , # 创建隐藏层 3\n",
    "    layers.Dense(10, activation=None) , # 创建输出层\n",
    "])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "out = model(x) # 前向计算得到输出"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 激活函数\n",
    "\n",
    "###  Sigmoid\n",
    "\n",
    "$$\\text{Sigmoid}(x) \\triangleq \\frac{1}{1 + e^{-x}}$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=406, shape=(10,), dtype=float32, numpy=\n",
       "array([-6.       , -4.6666665, -3.3333333, -2.       , -0.6666665,\n",
       "        0.666667 ,  2.       ,  3.333334 ,  4.666667 ,  6.       ],\n",
       "      dtype=float32)>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 构造-6~6 的输入向量\n",
    "x = tf.linspace(-6.,6.,10)\n",
    "x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=407, shape=(10,), dtype=float32, numpy=\n",
       "array([0.00247264, 0.00931597, 0.03444517, 0.11920291, 0.33924365,\n",
       "       0.6607564 , 0.8807971 , 0.96555483, 0.99068403, 0.9975274 ],\n",
       "      dtype=float32)>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 通过 Sigmoid 函数\n",
    "sigmoid_y = tf.nn.sigmoid(x)\n",
    "sigmoid_y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "def set_plt_ax():\n",
    "    # get current axis 获得坐标轴对象\n",
    "    ax = plt.gca()                                           \n",
    "\n",
    "    ax.spines['right'].set_color('none') \n",
    "    # 将右边 上边的两条边颜色设置为空 其实就相当于抹掉这两条边\n",
    "    ax.spines['top'].set_color('none')         \n",
    "\n",
    "    ax.xaxis.set_ticks_position('bottom')   \n",
    "    # 指定下边的边作为 x 轴，指定左边的边为 y 轴\n",
    "    ax.yaxis.set_ticks_position('left') \n",
    "\n",
    "    # 指定 data  设置的bottom(也就是指定的x轴)绑定到y轴的0这个点上\n",
    "    ax.spines['bottom'].set_position(('data', 0)) \n",
    "    ax.spines['left'].set_position(('data', 0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "set_plt_ax()\n",
    "plt.plot(x, sigmoid_y, color='C4', label='Sigmoid')\n",
    "plt.xlim(-6, 6)\n",
    "plt.ylim(0, 1)\n",
    "plt.legend(loc=2)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### ReLU\n",
    "\n",
    "$$\\text{ReLU}(x) \\triangleq \\max(0, x)$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=464, shape=(10,), dtype=float32, numpy=\n",
       "array([0.      , 0.      , 0.      , 0.      , 0.      , 0.666667,\n",
       "       2.      , 3.333334, 4.666667, 6.      ], dtype=float32)>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 通过 ReLU 激活函数\n",
    "relu_y = tf.nn.relu(x) \n",
    "relu_y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "set_plt_ax()\n",
    "\n",
    "plt.plot(x, relu_y, color='C4', label='ReLU')\n",
    "plt.xlim(-6, 6)\n",
    "plt.ylim(0, 6)\n",
    "plt.legend(loc=2)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### LeakyReLU\n",
    "\n",
    "$$\\text{LeakyReLU}(x) \\triangleq \\left\\{ \\begin{array}{cc}\n",
    "x \\quad x \\geqslant 0 \\\\\n",
    "px \\quad x < 0\n",
    "\\end{array} \\right.$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=521, shape=(10,), dtype=float32, numpy=\n",
       "array([-0.6       , -0.46666667, -0.33333334, -0.2       , -0.06666666,\n",
       "        0.666667  ,  2.        ,  3.333334  ,  4.666667  ,  6.        ],\n",
       "      dtype=float32)>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 通过 LeakyReLU 激活函数\n",
    "leakyrelu_y = tf.nn.leaky_relu(x, alpha=0.1)\n",
    "leakyrelu_y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "set_plt_ax()\n",
    "\n",
    "plt.plot(x, leakyrelu_y, color='C4', label='LeakyReLU')\n",
    "plt.xlim(-6, 6)\n",
    "plt.ylim(-1, 6)\n",
    "plt.legend(loc=2)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Tanh\n",
    "$$\\tanh(x)=\\frac{e^x-e^{-x}}{e^x + e^{-x}}= 2 \\cdot \\text{sigmoid}(2x) - 1$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=578, shape=(10,), dtype=float32, numpy=\n",
       "array([-0.9999877 , -0.99982315, -0.997458  , -0.9640276 , -0.58278286,\n",
       "        0.5827831 ,  0.9640276 ,  0.997458  ,  0.99982315,  0.9999877 ],\n",
       "      dtype=float32)>"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 通过 tanh 激活函数\n",
    "tanh_y = tf.nn.tanh(x)\n",
    "tanh_y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "set_plt_ax()\n",
    "\n",
    "plt.plot(x, tanh_y, color='C4', label='Tanh')\n",
    "plt.xlim(-6, 6)\n",
    "plt.ylim(-1.5, 1.5)\n",
    "plt.legend(loc=2)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 输出层设计\n",
    "\n",
    "### [0,1]区间，和为 1\n",
    "\n",
    "$$Softmax(z_i) \\triangleq \\frac{e^{z_i}}{\\sum_{j=1}^{d_{out}} e^{z_j}}$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=636, shape=(3,), dtype=float32, numpy=array([0.6590012, 0.242433 , 0.0985659], dtype=float32)>"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "z = tf.constant([2.,1.,0.1])\n",
    "# 通过 Softmax 函数\n",
    "tf.nn.softmax(z) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=682, shape=(), dtype=float32, numpy=2.1910672>"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 构造输出层的输出\n",
    "z = tf.random.normal([2,10]) \n",
    "# 构造真实值\n",
    "y_onehot = tf.constant([1,3]) \n",
    "# one-hot 编码\n",
    "y_onehot = tf.one_hot(y_onehot, depth=10) \n",
    "# 输出层未使用 Softmax 函数，故 from_logits 设置为 True\n",
    "# 这样 categorical_crossentropy 函数在计算损失函数前，会先内部调用 Softmax 函数\n",
    "loss = tf.keras.losses.categorical_crossentropy(y_onehot,z,from_logits=True)\n",
    "loss = tf.reduce_mean(loss) # 计算平均交叉熵损失\n",
    "loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=732, shape=(), dtype=float32, numpy=2.1910672>"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 创建 Softmax 与交叉熵计算类，输出层的输出 z 未使用 softmax\n",
    "criteon = tf.keras.losses.CategoricalCrossentropy(from_logits=True)\n",
    "loss = criteon(y_onehot,z) # 计算损失\n",
    "loss"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### [-1, 1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=737, shape=(10,), dtype=float32, numpy=\n",
       "array([-0.9999877 , -0.99982315, -0.997458  , -0.9640276 , -0.58278286,\n",
       "        0.5827831 ,  0.9640276 ,  0.997458  ,  0.99982315,  0.9999877 ],\n",
       "      dtype=float32)>"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = tf.linspace(-6.,6.,10)\n",
    "# tanh 激活函数\n",
    "tf.tanh(x) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 误差计算\n",
    "\n",
    "### 均方差误差函数\n",
    "\n",
    "$$\\text{MSE}(y, o) \\triangleq \\frac{1}{d_{out}} \\sum_{i=1}^{d_{out}}(y_i-o_i)^2$$\n",
    "MSE 误差函数的值总是大于等于 0，当 MSE 函数达到最小值 0 时， 输出等于真实标签，此时神经网络的参数达到最优状态。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=751, shape=(2,), dtype=float32, numpy=array([1.2226775, 0.9393095], dtype=float32)>"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 构造网络输出\n",
    "o = tf.random.normal([2,10]) \n",
    "# 构造真实值\n",
    "y_onehot = tf.constant([1,3]) \n",
    "y_onehot = tf.one_hot(y_onehot, depth=10)\n",
    "# 计算均方差\n",
    "loss = tf.keras.losses.MSE(y_onehot, o) \n",
    "loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=753, shape=(), dtype=float32, numpy=1.0809934>"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 计算 batch 均方差\n",
    "loss = tf.reduce_mean(loss) \n",
    "loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=773, shape=(), dtype=float32, numpy=1.0809934>"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 创建 MSE 类\n",
    "criteon = tf.keras.losses.MeanSquaredError()\n",
    "# 计算 batch 均方差\n",
    "loss = criteon(y_onehot,o) \n",
    "loss"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 交叉熵误差函数\n",
    "\n",
    "$$\n",
    "\\begin{aligned} H(p \\| q) \n",
    "&=D_{K L}(p \\| q) \\\\\n",
    "&=\\sum_{j} y_{j} \\log \\left(\\frac{y_j}{o_j}\\right) \\\\ \n",
    "&= 1 \\cdot \\log \\frac{1}{o_i}+ \\sum_{j \\neq i} 0 \\cdot \\log \\left(\\frac{0}{o_j}\\right) \\\\\n",
    "& =-\\log o_{i} \n",
    "\\end{aligned}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##  汽车油耗预测实战"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "import tensorflow as tf\n",
    "from tensorflow import keras\n",
    "from tensorflow.keras import layers, losses"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "def load_dataset():\n",
    "    # 在线下载汽车效能数据集\n",
    "    dataset_path = keras.utils.get_file(\"auto-mpg.data\",\n",
    "                                        \"http://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data\")\n",
    "\n",
    "    # 效能（公里数每加仑），气缸数，排量，马力，重量\n",
    "    # 加速度，型号年份，产地\n",
    "    column_names = ['MPG', 'Cylinders', 'Displacement', 'Horsepower', 'Weight',\n",
    "                    'Acceleration', 'Model Year', 'Origin']\n",
    "    raw_dataset = pd.read_csv(dataset_path, names=column_names,\n",
    "                              na_values=\"?\", comment='\\t',\n",
    "                              sep=\" \", skipinitialspace=True)\n",
    "\n",
    "    dataset = raw_dataset.copy()\n",
    "    return dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>MPG</th>\n",
       "      <th>Cylinders</th>\n",
       "      <th>Displacement</th>\n",
       "      <th>Horsepower</th>\n",
       "      <th>Weight</th>\n",
       "      <th>Acceleration</th>\n",
       "      <th>Model Year</th>\n",
       "      <th>Origin</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>18.0</td>\n",
       "      <td>8</td>\n",
       "      <td>307.0</td>\n",
       "      <td>130.0</td>\n",
       "      <td>3504.0</td>\n",
       "      <td>12.0</td>\n",
       "      <td>70</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>15.0</td>\n",
       "      <td>8</td>\n",
       "      <td>350.0</td>\n",
       "      <td>165.0</td>\n",
       "      <td>3693.0</td>\n",
       "      <td>11.5</td>\n",
       "      <td>70</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>18.0</td>\n",
       "      <td>8</td>\n",
       "      <td>318.0</td>\n",
       "      <td>150.0</td>\n",
       "      <td>3436.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>70</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>16.0</td>\n",
       "      <td>8</td>\n",
       "      <td>304.0</td>\n",
       "      <td>150.0</td>\n",
       "      <td>3433.0</td>\n",
       "      <td>12.0</td>\n",
       "      <td>70</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>17.0</td>\n",
       "      <td>8</td>\n",
       "      <td>302.0</td>\n",
       "      <td>140.0</td>\n",
       "      <td>3449.0</td>\n",
       "      <td>10.5</td>\n",
       "      <td>70</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    MPG  Cylinders  Displacement  Horsepower  Weight  Acceleration  \\\n",
       "0  18.0          8         307.0       130.0  3504.0          12.0   \n",
       "1  15.0          8         350.0       165.0  3693.0          11.5   \n",
       "2  18.0          8         318.0       150.0  3436.0          11.0   \n",
       "3  16.0          8         304.0       150.0  3433.0          12.0   \n",
       "4  17.0          8         302.0       140.0  3449.0          10.5   \n",
       "\n",
       "   Model Year  Origin  \n",
       "0          70       1  \n",
       "1          70       1  \n",
       "2          70       1  \n",
       "3          70       1  \n",
       "4          70       1  "
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataset = load_dataset()\n",
    "# 查看部分数据\n",
    "dataset.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "def preprocess_dataset(dataset):\n",
    "    dataset = dataset.copy()\n",
    "    # 统计空白数据,并清除\n",
    "    dataset = dataset.dropna()\n",
    "\n",
    "    # 处理类别型数据，其中origin列代表了类别1,2,3,分布代表产地：美国、欧洲、日本\n",
    "    # 其弹出这一列\n",
    "    origin = dataset.pop('Origin')\n",
    "    # 根据origin列来写入新列\n",
    "    dataset['USA'] = (origin == 1) * 1.0\n",
    "    dataset['Europe'] = (origin == 2) * 1.0\n",
    "    dataset['Japan'] = (origin == 3) * 1.0\n",
    "\n",
    "    # 切分为训练集和测试集\n",
    "    train_dataset = dataset.sample(frac=0.8, random_state=0)\n",
    "    test_dataset = dataset.drop(train_dataset.index)\n",
    "\n",
    "    return train_dataset, test_dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_dataset, test_dataset = preprocess_dataset(dataset)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x720 with 20 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 统计数据\n",
    "sns_plot = sns.pairplot(train_dataset[[\"Cylinders\", \"Displacement\", \"Weight\", \"MPG\"]], diag_kind=\"kde\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>min</th>\n",
       "      <th>25%</th>\n",
       "      <th>50%</th>\n",
       "      <th>75%</th>\n",
       "      <th>max</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Cylinders</th>\n",
       "      <td>314.0</td>\n",
       "      <td>5.477707</td>\n",
       "      <td>1.699788</td>\n",
       "      <td>3.0</td>\n",
       "      <td>4.00</td>\n",
       "      <td>4.0</td>\n",
       "      <td>8.00</td>\n",
       "      <td>8.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Displacement</th>\n",
       "      <td>314.0</td>\n",
       "      <td>195.318471</td>\n",
       "      <td>104.331589</td>\n",
       "      <td>68.0</td>\n",
       "      <td>105.50</td>\n",
       "      <td>151.0</td>\n",
       "      <td>265.75</td>\n",
       "      <td>455.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Horsepower</th>\n",
       "      <td>314.0</td>\n",
       "      <td>104.869427</td>\n",
       "      <td>38.096214</td>\n",
       "      <td>46.0</td>\n",
       "      <td>76.25</td>\n",
       "      <td>94.5</td>\n",
       "      <td>128.00</td>\n",
       "      <td>225.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Weight</th>\n",
       "      <td>314.0</td>\n",
       "      <td>2990.251592</td>\n",
       "      <td>843.898596</td>\n",
       "      <td>1649.0</td>\n",
       "      <td>2256.50</td>\n",
       "      <td>2822.5</td>\n",
       "      <td>3608.00</td>\n",
       "      <td>5140.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Acceleration</th>\n",
       "      <td>314.0</td>\n",
       "      <td>15.559236</td>\n",
       "      <td>2.789230</td>\n",
       "      <td>8.0</td>\n",
       "      <td>13.80</td>\n",
       "      <td>15.5</td>\n",
       "      <td>17.20</td>\n",
       "      <td>24.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Model Year</th>\n",
       "      <td>314.0</td>\n",
       "      <td>75.898089</td>\n",
       "      <td>3.675642</td>\n",
       "      <td>70.0</td>\n",
       "      <td>73.00</td>\n",
       "      <td>76.0</td>\n",
       "      <td>79.00</td>\n",
       "      <td>82.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>USA</th>\n",
       "      <td>314.0</td>\n",
       "      <td>0.624204</td>\n",
       "      <td>0.485101</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.00</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Europe</th>\n",
       "      <td>314.0</td>\n",
       "      <td>0.178344</td>\n",
       "      <td>0.383413</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Japan</th>\n",
       "      <td>314.0</td>\n",
       "      <td>0.197452</td>\n",
       "      <td>0.398712</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              count         mean         std     min      25%     50%  \\\n",
       "Cylinders     314.0     5.477707    1.699788     3.0     4.00     4.0   \n",
       "Displacement  314.0   195.318471  104.331589    68.0   105.50   151.0   \n",
       "Horsepower    314.0   104.869427   38.096214    46.0    76.25    94.5   \n",
       "Weight        314.0  2990.251592  843.898596  1649.0  2256.50  2822.5   \n",
       "Acceleration  314.0    15.559236    2.789230     8.0    13.80    15.5   \n",
       "Model Year    314.0    75.898089    3.675642    70.0    73.00    76.0   \n",
       "USA           314.0     0.624204    0.485101     0.0     0.00     1.0   \n",
       "Europe        314.0     0.178344    0.383413     0.0     0.00     0.0   \n",
       "Japan         314.0     0.197452    0.398712     0.0     0.00     0.0   \n",
       "\n",
       "                  75%     max  \n",
       "Cylinders        8.00     8.0  \n",
       "Displacement   265.75   455.0  \n",
       "Horsepower     128.00   225.0  \n",
       "Weight        3608.00  5140.0  \n",
       "Acceleration    17.20    24.8  \n",
       "Model Year      79.00    82.0  \n",
       "USA              1.00     1.0  \n",
       "Europe           0.00     1.0  \n",
       "Japan            0.00     1.0  "
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 查看训练集的输入X的统计数据\n",
    "train_stats = train_dataset.describe()\n",
    "train_stats.pop(\"MPG\")\n",
    "train_stats = train_stats.transpose()\n",
    "train_stats"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "def norm(x, train_stats):\n",
    "    \"\"\"\n",
    "    标准化数据\n",
    "    :param x:\n",
    "    :param train_stats: get_train_stats(train_dataset)\n",
    "    :return:\n",
    "    \"\"\"\n",
    "    return (x - train_stats['mean']) / train_stats['std']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(314, 9) (314,)\n",
      "(78, 9) (78,)\n"
     ]
    }
   ],
   "source": [
    "# 移动MPG油耗效能这一列为真实标签Y\n",
    "train_labels = train_dataset.pop('MPG')\n",
    "test_labels = test_dataset.pop('MPG')\n",
    "\n",
    "# 进行标准化\n",
    "normed_train_data = norm(train_dataset, train_stats)\n",
    "normed_test_data = norm(test_dataset, train_stats)\n",
    "\n",
    "print(normed_train_data.shape,train_labels.shape)\n",
    "print(normed_test_data.shape, test_labels.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Network(keras.Model):\n",
    "    # 回归网络\n",
    "    def __init__(self):\n",
    "        super(Network, self).__init__()\n",
    "        # 创建3个全连接层\n",
    "        self.fc1 = layers.Dense(64, activation='relu')\n",
    "        self.fc2 = layers.Dense(64, activation='relu')\n",
    "        self.fc3 = layers.Dense(1)\n",
    "\n",
    "    def call(self, inputs):\n",
    "        # 依次通过3个全连接层\n",
    "        x = self.fc1(inputs)\n",
    "        x = self.fc2(x)\n",
    "        x = self.fc3(x)\n",
    "\n",
    "        return x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "def build_model():\n",
    "    # 创建网络\n",
    "    model = Network()\n",
    "    model.build(input_shape=(4, 9))\n",
    "    model.summary()\n",
    "    return model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"network\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_9 (Dense)              multiple                  640       \n",
      "_________________________________________________________________\n",
      "dense_10 (Dense)             multiple                  4160      \n",
      "_________________________________________________________________\n",
      "dense_11 (Dense)             multiple                  65        \n",
      "=================================================================\n",
      "Total params: 4,865\n",
      "Trainable params: 4,865\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model = build_model()\n",
    "optimizer = tf.keras.optimizers.RMSprop(0.001)\n",
    "train_db = tf.data.Dataset.from_tensor_slices((normed_train_data.values, train_labels.values))\n",
    "train_db = train_db.shuffle(100).batch(32)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [],
   "source": [
    "def train(model, train_db, optimizer, normed_test_data, test_labels):\n",
    "    train_mae_losses = []\n",
    "    test_mae_losses = []\n",
    "    for epoch in range(200):\n",
    "        for step, (x, y) in enumerate(train_db):\n",
    "\n",
    "            with tf.GradientTape() as tape:\n",
    "                out = model(x)\n",
    "                loss = tf.reduce_mean(losses.MSE(y, out))\n",
    "                mae_loss = tf.reduce_mean(losses.MAE(y, out))\n",
    "\n",
    "            if step % 10 == 0:\n",
    "                print(epoch, step, float(loss))\n",
    "\n",
    "            grads = tape.gradient(loss, model.trainable_variables)\n",
    "            optimizer.apply_gradients(zip(grads, model.trainable_variables))\n",
    "\n",
    "        train_mae_losses.append(float(mae_loss))\n",
    "        out = model(tf.constant(normed_test_data.values))\n",
    "        test_mae_losses.append(tf.reduce_mean(losses.MAE(test_labels, out)))\n",
    "\n",
    "    return train_mae_losses, test_mae_losses"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot(train_mae_losses, test_mae_losses):\n",
    "    plt.figure()\n",
    "    plt.xlabel('Epoch')\n",
    "    plt.ylabel('MAE')\n",
    "    plt.plot(train_mae_losses, label='Train')\n",
    "    plt.plot(test_mae_losses, label='Test')\n",
    "    plt.legend()\n",
    "    # plt.ylim([0,10])\n",
    "    plt.legend()\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:Layer network is casting an input tensor from dtype float64 to the layer's dtype of float32, which is new behavior in TensorFlow 2.  The layer has dtype float32 because it's dtype defaults to floatx.\n",
      "\n",
      "If you intended to run this layer in float32, you can safely ignore this warning. If in doubt, this warning is likely only an issue if you are porting a TensorFlow 1.X model to TensorFlow 2.\n",
      "\n",
      "To change all layers to have dtype float64 by default, call `tf.keras.backend.set_floatx('float64')`. To change just this layer, pass dtype='float64' to the layer constructor. If you are the author of this layer, you can disable autocasting by passing autocast=False to the base Layer constructor.\n",
      "\n",
      "0 0 631.2608642578125\n",
      "1 0 498.2984924316406\n",
      "2 0 463.0345458984375\n",
      "3 0 407.7413330078125\n",
      "4 0 294.35791015625\n",
      "5 0 222.97335815429688\n",
      "6 0 175.49615478515625\n",
      "7 0 165.08721923828125\n",
      "8 0 140.70892333984375\n",
      "9 0 116.54345703125\n",
      "10 0 84.92292022705078\n",
      "11 0 65.83390045166016\n",
      "12 0 103.43635559082031\n",
      "13 0 80.78071594238281\n",
      "14 0 58.05918884277344\n",
      "15 0 49.872867584228516\n",
      "16 0 76.18902587890625\n",
      "17 0 48.43522644042969\n",
      "18 0 67.47596740722656\n",
      "19 0 53.7063102722168\n",
      "20 0 79.66985321044922\n",
      "21 0 49.1741828918457\n",
      "22 0 55.413856506347656\n",
      "23 0 63.3017578125\n",
      "24 0 61.413814544677734\n",
      "25 0 63.57815170288086\n",
      "26 0 80.48954010009766\n",
      "27 0 47.0885124206543\n",
      "28 0 61.520835876464844\n",
      "29 0 72.96417999267578\n",
      "30 0 62.51997756958008\n",
      "31 0 53.29653549194336\n",
      "32 0 66.95367431640625\n",
      "33 0 42.902400970458984\n",
      "34 0 68.52604675292969\n",
      "35 0 79.05203247070312\n",
      "36 0 59.25334930419922\n",
      "37 0 84.197265625\n",
      "38 0 66.14369201660156\n",
      "39 0 48.83231735229492\n",
      "40 0 64.41498565673828\n",
      "41 0 45.74956512451172\n",
      "42 0 52.54961013793945\n",
      "43 0 74.46099090576172\n",
      "44 0 69.72044372558594\n",
      "45 0 84.22567749023438\n",
      "46 0 53.072975158691406\n",
      "47 0 44.478843688964844\n",
      "48 0 56.924015045166016\n",
      "49 0 91.55659484863281\n",
      "50 0 45.66509246826172\n",
      "51 0 75.22466278076172\n",
      "52 0 84.19674682617188\n",
      "53 0 82.91278076171875\n",
      "54 0 45.658058166503906\n",
      "55 0 34.07839584350586\n",
      "56 0 60.03655242919922\n",
      "57 0 62.94922637939453\n",
      "58 0 65.17660522460938\n",
      "59 0 75.1546630859375\n",
      "60 0 79.67269897460938\n",
      "61 0 36.38483810424805\n",
      "62 0 53.52950668334961\n",
      "63 0 58.678077697753906\n",
      "64 0 56.48045349121094\n",
      "65 0 78.71077728271484\n",
      "66 0 66.3901138305664\n",
      "67 0 78.90377807617188\n",
      "68 0 74.5927505493164\n",
      "69 0 70.49131774902344\n",
      "70 0 56.229122161865234\n",
      "71 0 78.58154296875\n",
      "72 0 57.325836181640625\n",
      "73 0 87.44708251953125\n",
      "74 0 51.315616607666016\n",
      "75 0 73.54086303710938\n",
      "76 0 81.74449157714844\n",
      "77 0 73.23066711425781\n",
      "78 0 55.985382080078125\n",
      "79 0 62.44493865966797\n",
      "80 0 50.3884162902832\n",
      "81 0 61.78639221191406\n",
      "82 0 71.72891235351562\n",
      "83 0 51.201576232910156\n",
      "84 0 63.47085952758789\n",
      "85 0 44.0484619140625\n",
      "86 0 59.11956024169922\n",
      "87 0 64.26924133300781\n",
      "88 0 49.37725830078125\n",
      "89 0 86.32501220703125\n",
      "90 0 52.75836944580078\n",
      "91 0 95.13528442382812\n",
      "92 0 53.878875732421875\n",
      "93 0 71.44856262207031\n",
      "94 0 63.101280212402344\n",
      "95 0 60.45273971557617\n",
      "96 0 76.09822082519531\n",
      "97 0 61.005714416503906\n",
      "98 0 75.24070739746094\n",
      "99 0 66.77023315429688\n",
      "100 0 73.69732666015625\n",
      "101 0 78.72792053222656\n",
      "102 0 82.16004180908203\n",
      "103 0 61.84087371826172\n",
      "104 0 65.96925354003906\n",
      "105 0 66.2212142944336\n",
      "106 0 43.329856872558594\n",
      "107 0 50.133277893066406\n",
      "108 0 53.078277587890625\n",
      "109 0 80.22834014892578\n",
      "110 0 66.26248168945312\n",
      "111 0 84.21328735351562\n",
      "112 0 88.50770568847656\n",
      "113 0 58.02527618408203\n",
      "114 0 64.56596374511719\n",
      "115 0 63.66229248046875\n",
      "116 0 67.13517761230469\n",
      "117 0 65.06636810302734\n",
      "118 0 88.4543228149414\n",
      "119 0 71.5194091796875\n",
      "120 0 45.366676330566406\n",
      "121 0 72.59146118164062\n",
      "122 0 58.001060485839844\n",
      "123 0 57.87835693359375\n",
      "124 0 67.26441955566406\n",
      "125 0 77.764892578125\n",
      "126 0 42.69489288330078\n",
      "127 0 48.88022994995117\n",
      "128 0 67.39302062988281\n",
      "129 0 59.56265640258789\n",
      "130 0 52.01995849609375\n",
      "131 0 90.07652282714844\n",
      "132 0 72.67803955078125\n",
      "133 0 84.59417724609375\n",
      "134 0 60.65301513671875\n",
      "135 0 51.57958984375\n",
      "136 0 45.44976043701172\n",
      "137 0 82.44757080078125\n",
      "138 0 50.44966125488281\n",
      "139 0 82.96275329589844\n",
      "140 0 67.1759033203125\n",
      "141 0 57.264923095703125\n",
      "142 0 56.294471740722656\n",
      "143 0 58.3807373046875\n",
      "144 0 38.46620178222656\n",
      "145 0 57.645484924316406\n",
      "146 0 57.357261657714844\n",
      "147 0 77.56813049316406\n",
      "148 0 57.57910919189453\n",
      "149 0 50.523277282714844\n",
      "150 0 81.09687805175781\n",
      "151 0 41.773746490478516\n",
      "152 0 54.78472137451172\n",
      "153 0 70.45822143554688\n",
      "154 0 47.4709358215332\n",
      "155 0 46.984107971191406\n",
      "156 0 77.45779418945312\n",
      "157 0 79.00375366210938\n",
      "158 0 70.23616790771484\n",
      "159 0 66.56919860839844\n",
      "160 0 57.5838508605957\n",
      "161 0 54.844810485839844\n",
      "162 0 87.79934692382812\n",
      "163 0 73.09942626953125\n",
      "164 0 52.46918487548828\n",
      "165 0 65.65866088867188\n",
      "166 0 56.35209274291992\n",
      "167 0 63.63457489013672\n",
      "168 0 46.45928192138672\n",
      "169 0 75.96061706542969\n",
      "170 0 84.93106079101562\n",
      "171 0 65.64949798583984\n",
      "172 0 77.74638366699219\n",
      "173 0 71.67083740234375\n",
      "174 0 58.248199462890625\n",
      "175 0 64.14410400390625\n",
      "176 0 70.64827728271484\n",
      "177 0 67.26859283447266\n",
      "178 0 60.02803421020508\n",
      "179 0 43.42764663696289\n",
      "180 0 53.596435546875\n",
      "181 0 66.89273834228516\n",
      "182 0 79.2694091796875\n",
      "183 0 65.7293472290039\n",
      "184 0 65.59268188476562\n",
      "185 0 89.2174072265625\n",
      "186 0 62.873046875\n",
      "187 0 75.51353454589844\n",
      "188 0 50.40679931640625\n",
      "189 0 36.711544036865234\n",
      "190 0 42.422420501708984\n",
      "191 0 57.17564392089844\n",
      "192 0 66.01192474365234\n",
      "193 0 46.97712326049805\n",
      "194 0 62.60189437866211\n",
      "195 0 74.72149658203125\n",
      "196 0 53.76980209350586\n",
      "197 0 53.57059097290039\n",
      "198 0 61.816802978515625\n",
      "199 0 79.8518295288086\n"
     ]
    }
   ],
   "source": [
    "train_mae_losses, test_mae_losses = train(model, train_db, optimizer, normed_test_data, test_labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEGCAYAAABo25JHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOydeZxcVZn3v6f2rat6qd6XdDZCNgIhgbBjBAQRRQdww0EZRX1nfNVRZ+ZlRGcUGAdHnVF0FMUBRpBNEGWTJeyELCQha2frbL3vXft+3j9u3dvVazpJV3egzvfzySfVdW/d+1TVrfM7z3KeK6SUKBQKhaJwMc20AQqFQqGYWZQQKBQKRYGjhEChUCgKHCUECoVCUeAoIVAoFIoCxzLTBhwPfr9fNjY2zrQZCoVC8a7i7bff7pFSlo98/l0pBI2NjWzcuHGmzVAoFIp3FUKIQ2M9f9KEhoQQViHEZTNth0KhUBQaefEIhBA+4CtAKRABHgE+BMwH/iyl/EPOvibgIaAXeDof9igUCoVifPIVGpoP3CallEKIx4HnpZS3CSEE8Azwh5x9fdl9t+TJFoVCoVBMQF6EQEq5EUAIYQZ6pJSvZDc1AGtH7F4EfF0IUQn8Rkr56FjHFELcBNwE0NDQkA+zFQpFgZBMJmlpaSEWi820KXnB4XBQV1eH1Wqd1P4in72GhBDXA89IKXuFEE7g08BvpZSZMfY1A89KKS892nFXrFghVbJYoVAcLwcOHKCoqIiysjK0QMV7Byklvb29BINBZs+ePWybEOJtKeWKka/JW7JYCHEV8ERWBGqBy6SUvwFc2cTwsE9fSpkGduXLHoVCodCJxWLvSREAEEJQVlZ2TN5OvpLF/wCcClyUDfnUAZuEEBcAy4DLgReFEFcC1wJWoA24Px/2KBQKxUjeiyKgc6zvLV85gjsmsdvq7P/35cOGMXnjv8BeBCtunLZTKhQKxcnOSbOOYFrY+SfY+cRMW6FQKAqcX/3qV4zMzz755JMEg8EZsaewhMDth3DvTFuhUCgKnG3btvHoo49y6623snr1av74xz+ydu3IgsrhfPe73yWdTufFnndli4njxuWH9ndm2gqFQnES8a9/3sHOtsCUHnNRjZfvXrV43O133nknAC+//DL79u3j6quv5uqrr2bPnj0UFRWN+Zp/+Zd/yVteo7CEwF2GDPfwn8/t5m9Xz8dmKSyHSKFQnLysWbOGH/7whyxcuJArrriC7u5uMpkM27Zt45ZbbuHjH/84Tz31FLfffjtmsxmv18tLL73Eww8/fMLnLiwhcPkRmSS/XbOVc+f5OXtO2UxbpFAoZpiJZu7Tyfve9z7uuOMOfvzjH5NMJnn11VdZunQpTz/9NB6Ph9LSUgCKi4tZtGgRF198Ma+//vqUnLuwpsRuPwClIkAkkZ9Ym0KhUBwPQgiqqqoAsFqtBAIBmpubjdXBZrMZAJfLZbxmsiuHj0ZhCYFLE4IyAoQTqRk2RqFQFDLd3d0899xz7N69m507d7Jv3z6ampqMFvt33nkniUSC/v5+XnnlFVpbW9m3bx/btm1j3bp19PT00NLSwo4dO07Ylry2mMgXx91iovVt+PVqPp/4Bpd99HNct7J+6o1TKBQnPbt27WLhwoUzaoM+9o5MAKfTaWP2n/ucyWQatu1oieOx3uN4LSYKLkcAUCKCyiNQKBQzyngD+UgRyH3OYsnPkF1YoSH3UGhI5QgUCoVCo7CEwOYmLuyUiiAR5REoFAoFUGhCAAwKL2UiQDiuPAKFQqGAAhSCPryUElAegUKhUGQpOCHoyRRRKoKEVY5AoVAogAITgnRG0pn2UCYCROLKI1AoFAooMCEIRJP0SS+lKI9AoVDMHKoN9QwymBUCl4iTiYdn2hyFQlGgHE8b6nxSUAvKBqJJetFavFrjfTNsjUKhOCl45p+gY9vUHrNqKVzxg3E3j9eGeiJ6e3t58803ueqqq6bUVCg0IYgk6JNeAOzx/hm2RqFQKIaIRqPcddddnHnmmTQ1NXHVVVfx61//muLiYq677jruu+8+mpqasFqtXH755VN67oISAi00pHkE9tTADFujUChOCiaYuU8nv/vd7/B4PFgsFoLBoNGK+pZbbsHv97NixQr8fv+UiwAUmBAMRJIM4gbAmQogpczbHX8UCoXiWEgkEixcuJBVq1axatUqent7efDBB7nlllvIZDJ5HavyIgRCCB/wFaAUiAA/AS4ABoCElPLNnH3Lxts21QxEkvRnPQKfDBJPZXBYRzd4UigUinwzsg319ddfz+c//3nWrl3LqaeeytKlS3n00Ue58MILqa2tBeC3v/0tixcvZuXKlVNqS748gvnAbVJKKYR4HPg28A9SyqQQ4g4hxHoppV7I/03gO+NsMxBC3ATcBNDQ0HBcRg1EE2TsPgCKCRFNpJUQKBSKGcHv93PbbbcNm+k/8sgjw/a5+eabh/1977335sWWvJSPSik3ZkXADPQAs6SUyezmDDA3Z/cFE2zLPeZdUsoVUsoV5eXlx2XXYCSJx+UgYSmiWIRUK2qFQjFjCCFOmtB0vtcRfBL4pzHOk7uSYqJtU8pANEmxy0rSXkyxCKlW1AqFQkEehUAIcRXwhJSyF+gUQjj1TUCzGJLCppHb8mXTQCRBsdNG2l5MCSHCqs2EQqFQ5C1Z/A/AqcBFQogK4G7gQ0KINuBxKWVKCLFGCHEl8MOR2/JhE8Cy+mJKXDYy+0soFi2qzYRCUcC8l6sGj/UWxHkRAinlHZPYZ3X2YRR4ZKJ9p4rvXrUYgIG2EorZTZfyCBSKgsThcNDb20tZWdl7TgyklPT29uJwOCb9moJaR6AjXKWUiCDRpPIIFIpCpK6ujpaWFrq7u2falLzgcDioq6ub9P4FKQRmdxkeESESS8y0KQqFYgawWq3Mnj17ps04aSio7qM6Fk8pAKmwajynUCgUBSkEtiI/ABklBAqFQlGYQmBylQEgoqoDqUKhUBSkEOAsAUDElEegUCgUhSkELk0IzHHVilqhUCgKUwiyHoFVCYFCoVAUqBDYfaQxYUsqIVAoFIrCFAKTibCpCGticKYtUSgUihmnMIUAiFu8WBPKI1AoFIqCFYKkvRhXapBUOjPTpigUCsWMUrBCIB3FFBGhOxSfaVMUCoViRilYITC7ivESoX0wNtOmKBQKxYxSsEJgc5fgFWE6lBAoFIoCpyC7jwI4vaVYidAxEJ1pUxQKhWJGKVghcHhKESJD74CqHFIoFIVNwYaGhNMHQKC/Z4YtUSgUipmlYIUAuxeA8GDvDBuiUCgUM0vhCoFD8whiIdWBVKFQFDYnlRAIIaxCiMum5WSOYgBS4QGklNNySoVCoTgZyWuyWAixHLhdSnm5EOK/AWd2Uz1whZQykd3PBDwE9AJP59Mmg6xH4MyE6AsnKPPYp+W0CoVCcbKRNyEQQjiBQM5T35BSRrLbPqWLQBYfcJuUcssEx7sJuAmgoaHhxA3MCoFXaIvKlBAoFIpCJW+hISllVEq5L+dvXQQuBNaO2L0I+LoQ4lkhxDXjHO8uKeUKKeWK8vLyEzfQoSWLvUToUW0mFApFATMTOYI5UsoDuU9IKQ9LKW8ArgS+OC1WWOxkzA6KRIRESjWeUygUhcu0CoEQwg6Ec/4WudullGlg13TZk7Z78RImlVHJYoVCUbjkO1m8EGgQQsyRUjYD5wEv5uzyohDiSuBawAq0Affn06ZcpM2LV0RIqlbUCoWigMmrEEgpdwGLcv5eM2L76uzD+/Jpx3hIhw8vEbrTyiNQKBSFy0m1jmC6kXYvXhEmlVEegUKhKFwKWgjIegQqR6BQKAqZAheCYrwiQkqFhhQKRQFT0EIgnD68hEmm0jNtikKhUMwYBXs/AgCTsxirSENK3ZxGoVAULgXtEZiy9yQwxYMzbIlCoVDMHEoIAHMicJQ9FQqF4r1LQQuByLaitiSVECgUisKloIVA70BqUR6BQqEoYJQQAJakyhEoFIrCRQkBYFNCoFAoChglBIA1pYRAoVAULoUtBFYHcazYVbJYoVAUMIUtBEAIN/Z0+Og7KhQKxXuUgheCiHBhT6vQkEKhKFwKXgjCJg+OVGimzVAoFIoZQwmBcOPIKI9AoVAULgUvBFGTB6fKESgUigKm4IUgYvbgyqjQkEKhKFymXQiEEFYhxGXTfd7xiJqUECgUisImr0IghFguhHg2+9gkhHgE+BngGLFfmRDiaiHExUKIc/Np00hiZg82kpCMTedpFQqF4qQhbzemEUI4gdyVWj7gNinlljF2/ybwHSllUghxhxBivZQylS/bcolZirQH8QBYHRPvrFAoFO9B8uYRSCmjUsp9OU8VAV8XQjwrhLhmxO4LpJTJ7OMMMHfk8YQQNwkhNgohNnZ3d0+ZnXGzR3sQG5yyYyoUCsW7iWnLEUgpD0spbwCuBL54FDtG3U1eSnmXlHKFlHJFeXn5lNmVsCghUCgUhc20J4ullGlgF4AQQmSfbsqGkgAE0Dxd9iSsXu1BbGC6TqlQKBQnFXm9eb0QYiHQIISYA5wPWIE24P7sLi8KIa4Efgh8SAjRBjw+XfkBgKSeI1AegUKhKFDyKgRSyl3Aouyfo2b5UsrV2YdR4JF82jIeSasSAoVCUdgU/IKypE0PDSkhUCgUhUnBCwFmB0nMSggUCkXBUvBCYLGYCUg3xNTNaRQKRWGihMAsCOBSHoFCoShYCl4IrCYTQamEQKFQFC4FLwQWs2BQupBKCBQKRYFS8EJgNZsI4EKqBWUKhaJAKXghsJhENlmsPAKFQlGYHJMQCCHOFUJcki9jZgJL1iMQqmpIoVAUKBMKgRDi34QQ9UKIBiFEDbAW+MD0mDY9WM2aRyBSUUjFZ9ochUKhmHaO5hH8AegGrgGiUkoJ/DHvVk0jFpPmEQBqLYFCoShIjiYEGSllDHhDStmffW5Ui+h3MxazICCzQhBXQqBQKAqPozWdWyWE8ACLhBD27HNnAW/m16zpw2oWBA2PQFUOKRSKwuNoQvAxYGX28dnZ/yuA/8ibRdOMxWQa8ghU5ZBCoShAjiYEn5VStuQ+IYSoz6M9047FJAjg1v5QQqBQKAqQCXMEI0UgyxV5smVGsJiVR6BQKAqbSa0jEEIsFkLcKoTYhlZB9J5BazqnPAKFQlG4jBsaEkLMAj4JXAuEgLeBCyZ6zbsRq8lEBDtSmBFKCBQKRQEy0aD+WWAxcDPwPLBCSvmeK6uxmAUgSNm8WJUQKBSKAmRcIZBS/iuAEGIFmhg0CiGsQKuU8uD0mJd/rGYBQMpahFUtKFMoFAXI0VpM2KWUG6WUtwJfAOzAP+bLGCGEVQhxWb6OPxYWk/YRJK1FKkegUCgKkqMliz8hhKgQQlQA5cB24LXJHlwIsVwI8Wz28TIhxD8LIe4RQvzViP1MQohHgJ8BjmN7CyeGJesRJC1KCBQKRWFytMTvV9GqhLqzfwtgDvDA0Q4shHACubEWm5TyNiGEAJ5B62Ok4wNuk1JumazhU4XVrGlhwloEsbGqZRUKheK9zYRCIKVcLoQ4F201cbOUcutkF5RJKaPAPm3cBynlhuymBrQuprkUAV8XQlQCv5FSPjryeEKIm4CbABoaGiZjwqSwmDT7EpYiCCqPQKFQFB5HXUcgpXxTSvlHICiEuA1Ycbwny3oJlwLfH3GOw1LKG4ArgS+OY8ddUsoVUsoV5eXlx2vCKHSPIKZCQwqFokCZ7IKyDwK/BWYBe47nREIIF3CZlPI3gCubGBa5+0gp08Cu4zn+8aLnCOJmDyTDkE5O5+kVCoVixpkwNCSE+DjwNWATcKOU8oAQonayBxdCLAQahBBzgduAViHEBcAy4HLgRSHElWiL1qxAG3D/cb2T40SvGhrIOAHYdbCFhXNnT6cJCoVCMaMcLVn8LeAnQAcwWwgxB7gQ+O5kDi6l3AUsyv75iTF2WZ39/77JHC8f6OsIDkVsABxoaVNCoFAoCoqjCcG1UsoDuU8IIcJ5tGfasWRzBJ1xTQhkVOUJFApFYXG07qMHxnjurfyZM/3oVUNtsawQqJvTKBSKAmNSyeL3MnrV0JGoJgSq8ZxCoSg0Cl4IzCaBEHAoqiWLzbH+o7xCoVAo3lsUvBCA1oq6jyIA7PGeGbZGoVAophclBGhrCVJY6JMeHPHemTZHoVAophUlBAwljHulD2eib4atUSgUiulFCQFDCeMe6cOTVEKgUCgKCyUEDLWZ6MGLJ62EQKFQFBZKCBhqM9EjfXjTah2BQqEoLJQQMNRmolv6cMkIJGMzbJFCoVBMH0oIGGoz0YNPeyLcNYPWKBQKxfSihIChqqGwuUR7ItQ9wd4KhULx3kIJAUPJYooqtP+VR6BQKAoIJQQMJYttvirtiZASAoVCUTgoIWAoWewu0YRAhlVoSKFQFA5KCBjyCMpLiglIJ+lg5wxbpFAoFNOHEgK0HIHbZsbrtNAjfWSCKjSkUCgKByUEaC0mil02nFYzvXiRKkegUCgKiKPdqrIgOL2+GL/HhtNmpkf6ECpHoFAoCgglBMD/ff98AJ7d3kG7LMUc3AFSghAzbJlCoVDkn7yGhoQQy4UQz2YflwkhrhZCXCyEOHfEfuNum06cNjOHZCXmVATC6gY1CoWiMMibEAghnEAg56lvAk9JKV8GrhZCWCa5TT/eTUKIjUKIjd3d+QndOK2aEADQfyAv51AoFIqTjbwJgZQyKqXcl/PUAillMvs4A8yd5Db9eHdJKVdIKVeUl5fnxWan1cxhmV1d3KeEQKFQFAbTWTU08lxyktumDafNRIssRyKUR6BQKAqG6RSCpmy4CEAAzUIY2dhR26bRLgOH1UwcG1FHBfQfnAkTFAqFYtrJd7J4IdAghJgD/BD4kBDiPOBxKWUKeDErAGNtm3acVjMAAWe9Cg0pFIqCIa/lo1LKXcCinKceGbF9dfZhdOS2mcBp04Sg31FLVf9bM2yNQqFQTA9qZXEODosmBH3WGgh1QiIywxYpFApF/lFCkIPJJLBbTHRba7QnVJ5AoVAUAEoIRuCwmukwV2t/qMohhUJRACghGIHTaqZNF4KuXTNrjEKhUEwDSghG4LSZ6c+4wX8KtGycaXMUCoUi7yghGIHDaiaaSEPdSmhZrzWfUyimgExGcv+6Q8RT6Zk2RaEYhhKCETitJmLJrBBEelWeQDFlbGkZ4J8f384b+1RDQ8XJhRKCEThtZqK6EAAc2TCzBineMwSiWjutcFx5BIqTCyUEI3DqoaGKhWDzaOEhhWIK0AUgmlRCoDi5UEIwAofVrIWGTGaoXQ5HlBC81xmMJPnM3etoG4jm9TyhuOYRxJQQKE4ylBCMoNRtoysYJ52R0HgBdGyDwZaZNmtKSKYzBGPJo+9YYDR1BHhtbw/rDvTm9TyhrEegC0EoPiMttRSKUSghGMFpdcWE4in2d4dg6TWAhK0Pz7RZU8IvX97PVT97fabNOOkIJ7QBuTMQz+t5QjHtPNFEhu5gnOXfe56Xmrryes6ZpLk7xDPb2mfaDMUkUEIwgjMaigHYfLgfSudA/Sp458FjKiO99cmd/PTFvfky8bhp6Y/S0p/f8Me7EX2m3jEYy/N5NG8smkzTGYiRSGd4qzm/XshMcs+bB/naQ1uQqgT7pEcJwQhml7nxOa1sPjygPXH6J6FnN7RtnvQxXmzq4t43D5LJTM0PIBRPkUxnTvg44USKVEaSSJ34sd5LhOO6R5BvIRgKDUUS2uPtbYN5PedM0hdOEE9liCXV9Xayo4RgBCaT4PT64iEhWHQ1WBzE1t/Dm5Os/x6IJOgNJ6bsR37Vz17nP1/Yc8LH0QefaGJmk5XbWgbpDuY3DHMsTJ8QaOfRhEB7vKMt8J6dMQ9ENA+oP5KYYUsUR0MJwRic0VDMnq6gllh1FsOSaxBbH+LLv335qBUfmYxkMFsv/vLu7hO2JZZMc6AnPCRMJ4A+4EWSM5uk/Oz/rOf/PbZtRm3IJRSfrhzBUGhIF+OBSJK2KQ5JDUaTfP7eDbQPzmwYUBcAJQQnP0oIxuCMhhKkhI0H+wHoWfTX2GWMj4pXONI38T0KgvEUekTo5d0nngjsyg5O+7tDxnOJVIa1+3uPOfSkewSRGfQIook0veEEL+3uoivPM/DJkusRTFU4b+zzDHlkud/BjtapDQ9tbx3khV1dUzIRORF0j0D/X3HyooRgDJY3FFPmtvGV32/mgXWH+dXeIjZn5vEZ8/Mc6p74RzuYvejrS51sOTJAf/jYZkMHe8I8vOGI8bc+q+sMxAlkZ5Qv7urkk79+i68+tOWYatL16piZDA11BbXBP52RPLa5dcqP//LuLt7c13NMA7oeu09lJH15nL0G9dBQKkMk53vb0RaY0vPoYbe9naEJ93tw/eG8rp0YeA97BF2BGH/Z0THTZkwZSgjGoMhh5U9fOZ+F1UXc/Pg2fv3aAZ4r+RRzTe0Ub/qFsd+H73yd/355/7DXDkS1i/79p1aSkdDUETS2PbejgwfXH57w3L9ff5h/+MNWY7DuyJk1N3eHAWjN/nj//E4btz89+VbZkfjMewR6+MVlM/PwhiNTGh9PpTN84b6NfOo36/jgT1+btEjm1vOfaOXQwZ4wPaGxQ0y65xFLpIlkH1f7HFMuBPr593WPLwSheIp/emwb9649OKXn1kmkMoRzwl/vNe56tZkv/+7t90zhxUkjBELjipm2Q6e22MlDN53D77+wii9cMJuPfeomnuFcTj/wK+jYTiyZZmvLIBsO9g17XX/2op9T7gYwZvEAv3ntAL8YIRwj6c7+iPXEZe7AtK9L+2F3BePYLSbOnFVy1FlfLrpHoCcqZwL9fV1zZh3NPWEOHyXUdix0h+Ik05KzGktp6giy/kDf0V+ENkCbxHD7HtvUwvf+vPOYbbjx3g3jirMuONGcqqHls0po6phij0AXgs7guPvos/X9XZO/fo4FfUKUey6drkCMJ7ZMvTd4rNz16n4eWDfxxGw8mjqCZOSQuL/bmTYhEEJ8VQhxT/bfi0KI03K2/QD4b2DxdNkzGUwmwTlzy/jnKxcxv7KI35X+HSHhhQc/SWfrIUCbAeaiX/QNpS5gqNEYQPMEs0WdnpD2et0TaB+M4bKZsZqFkSfoDMSo9Drw2C3G4H40pJQnRdWQPtCumlMGaO+vJxTn+0/uPOH2zLpo3nBuIzaLadIx8lA8RX32+9I9lkc2tvDwxiMTvWwU6YzkcG+E1nHWaugLymLJNNFkGofVRF2xk65AfEo9o56gdg21DcbGXb2sFzTszZcQ5HgB/TmPY8k0f3PvRr764JYJq7SklLy+tyevFVUPb2zhgfWHjuu1ungf6+rwf3+2ie8/OTTBiKfS/N0Dm/jEXWv54V+ajsuWqWA6PYJfSyk/K6X8LPBbKeXWnG1/kVJ+SUr5H9NozzFTWl7Dt6w3Q7iH0j9dTwkBDvdFSOXU+Os/MEMIsj/+QCxJTyhOJJGecEbeExztEdQUO2kscw95BIE4FUV2PHbLpC/EeCqjtc1gZkNDujdzSmURoOVAXtjZyd2vH+DtbHL+eNE/s1llLlbNKePlPZNL1ofjKWaVuRFCE2ApJbs6AoTiqWOa8XUFY6Qy0piR5xJPpUlkr5NotnzUZbNQXmQnkc4QiKbY1R44ZvEZi9zJxngzfv06PdIXyUvvo9zcWG6O4NandrItmxyfyBt5ZU8319+9js1HTqxaLhBLsuFg35i/k4FIkv1d4WMuEOgOxo0JWzB2bELw/M7OYUUk+7vCPLm1nR1tAX75SvOMeevTJgRSygiAEMIDjJwKfEoI8XDWMxgTIcRNQoiNQoiN3d0zUw3RWObixUANyb+6B+fAPh6zfZdZsoW2gaG3o8+EakucCDHkEeR6DvqMbSx6w9qPWJ/ddgRiVPsczC33DHkEQc0jcNvNkx6ocgf/yAn+8COJFD96bvdx9S3SvZmaYgegeQT6aufdE4QyJoP+mVX5HFx8SjnN3eGjVnmBJgQ+pxW/x05XIEZHIGZ8j13HsN5B9wTGWiOR23o6lkwTiadxWs2UF9m114Ri3PvmQb7zxPZhr9t8uJ++Yyw46A7GaSzTJiL7xhOC7PvLyKHc01SiewEWkzA+y0xG8vv1R7h4QTkwvBJuJDvbtRl3zwmsN3l2ezvL/vU5rv3lWj72izeGhWmllAxGE0ST6WF5uMmwOyfvdyweQSYjOdwXMSoBYSiE9qmzG0hnJFtOUPiOl5nIEVwO/CX3CSnlF6SU1wEeIcTCsV4kpbxLSrlCSrmivLx8OuwcxawyNxkJLf7zeXjxz/GJME/b/h+m526G3c9CLMBAJInHbsFuMeOxW4yZ14FcIQgPv7jbBqK8uV+rdOnNzjTaB4c8gkqvg3kVHg71RkikMnQH4lR47Xjs1kn3ts8VjNgJegSPbGzhZ2v28dreY7/BSlcgTqXXjstmwee00j4Qo6VfG6z3nKgQBOJYzYJSl80YbF6aRAlvKJ7GYzdT5XXQEYixq30oZj9R+KJ9MMof3h5qSKgn8YOx1KhZtv75+5xWo3zUbTdT7skKQTBB+2CMWDJjeJiBWJLrfrWWX706lFfa3jrIJ+96a8JZfE8ozvJZJVjNYtzQz2BOyHJv19Dn3huK8+z2duO9HC+D0aEQqR4uDcSSpDOS8+f5cdvM7J9AgPTcV66dx8rLu7spslv4/tVLaO4O87f3bzJm/5FEmmRaezyRII1Fbk5HbxuSi5SSP25uZVvL8ArDrmCcRCpDMJ4ato4EYPWCCoQYKlkfi72dQW5/eldeGkfOhBA4pZQhIYQYY1szMHXZwylmVnaWdag3zIbUfK6WP+LJzDnU7r4Hfv9x+OkZLGh7nFqHduF7HVZjFpI76xo5y/nJ83v4m3s2MhBNkspeqJ2BGKl0hq6g5hHMr/SQzkh2tA0SjKeoKHLgsZsJJ1JIKfndW4f47evj301tmEeQfZzJSG68Z8OwxmDpjBwmWiORUrvdImCsAzjYE550LLczGKPCq3kD1T4H7YMxjmRn0nuOIfE95rEDMSqKHJhMgtl+N6dUerj3zYPGwPrEllYu/fEro3744XgKt81Ctc/Bvq4Qu9qDw445Fl2BGJ+46y2+8cg7Rglm7uA50ivQQwjlRQ6Pyt4AACAASURBVHajfNSZDQ2BluDVS4X1apt1zX0k03KYN/n2oX7WNvdysHfs7yiTkfSGE1T7HMPCiSPJHWD1fR7f3MKK217gS7/bxI3/s+GEcja6R9Dod+esMNb+L3XbmJPj4Y6FPikIHGPoJZetLYMsqy/mM6tm8a0PLOC1vT0094Sytgx5Wbkhqslcx7mVgCNDQ+mM5Lt/2sHXHtrCj5/fPWzboZzvTC+j1j+bWWVuFlQWjSo+yeX2p3fx+/WHDQGbSqZVCIQQbkCfRv5ACHGBEOIsIcTNQohLgH1SyuPL3kwDQ0KgJQSramZxi/g7/v30v8BfPwGls/l4+x08E/8M3LmSH6R/xIVt/wObf0dp8xOcZm3FRMaIL+psax0kmkyzM6eMsCMQoyeUICO1UMepVV4AXt2jfXyVXjtuuwUptYH9D5ta+NmavePGO3OTyvrK4vUH+1jT1MWft7YZ257a1s4lP35l3FWpGw72GwN2VzDOkb4I7/vRy9w9hgiNtUCrKxCnskgTgiqfg45AdMgj6AieUHKwYzBGlU87thCCb1y2gP3dYX6//jD3rzvE1x/awt6uEDc/ts04TzojiSbTuO0WLl9SRUt/lAfWHabYZTXsHUkmI/ncPRuMiid9hphbkz8yT6CHEPweG+ns6nNXbmgoGDe8QN17eH2vFgLNbRSoH2e88OJAVJt1+z12FlQVsaNtECkl21sHeXb7UN37YDSJ2SSY49fEIpZM829PN7G01sf3PrKY3Z1Bfvz88bc16Y8ksJlN1BQ7Rq0wLnHZmFvuHjcklc5IQ5wm4xFsbx3krlf3D7vWYsk0uzuDLKvTmkiuaCwBMCYducns5qzQbjkywGn/+hzbj7LAb3dHkPkVHmB0aOixTS3ct/YQXoeFg73D57S5FXJ6yFEPDRW7rKxoLGHz4QEjl5fL63t7eGl3N19ZPY9St21C+44Hy5QfcQKklGHgmezjf8zZ9K64+0u5x06Jy8o7RwZoHYhy9uxSgvEUewZMMOdiaLyQW376K5ZldnJNWS+n9G+icuB1eOIebgBuMEPSZCa6pgJ2zAZPBSmLk0/19hKx2DG/9gp/Yw5hdXhI9NlJrNvC9ea9LIjDHMtCFppbEe+8zRWmFPVUkxYmXMQIR2MMRpOEIlH27m1iQaUbhEnrmBrpBZOZaNRvvA/dLf3TO5oA7GzphUA7eCpp6Y+Qzkh2dwSp9jlHfQYPbjhMkcOCzWyiKxjnQE8YKeFna/Zx7Zn1tA1GmVvuYUfbINf+ci1fvngu37hsAf/71iEW13gJxVNUerXBr9rn5O1D/QRjKSqK7ASCAdp7+6nxlw4/aSYNsUFIhMFXB0JAPAQ2t/Y4S2cgxsJqr/H3ZYsqWTGrhFue2AHAuXPLuGRhJd97ciePvt3CtSvqDYH02C18cGk1339yJ60DUS5ZWMnr+7qNmVsu6w70saMtwHc+tIjvPbmTpo4gq0+tpLU/itUsSKblKI8gFuzHSxi/p5oiIqRCSVyVtficVqxmwcGesDG7NIQg29sqVwj0fcarPtOf93vsnD2njCe3tnOoN8KtT+1kT2eIy5dUAdoA63NamV/poakjyC9f2U9XMM6dn1rOWbNL2dkW4K5Xm7nhnEZqikdfB6TigACLNihJKXl5TzfnzCnDYTUzGElS7LJS4rIxGE2SyUgjgVzssjK33MMft7QRTaRx2szDDt3SHyGerc8PTEIIHnhjL09v2kdnIM63r1yIEIKd7QHSGcnSOh8AdSWuoc9SSoIBLRZvNgn2dwXJ9B3iR49vJxjTJmZLan1jniuTkezpDPKx5bXs7QqNytG9vLuLuiITHz5zFne92kwqncFi1ubbw4QgO8EYiCRxWE04rGZWNpbyu7cO09QRYHHN8PP/4Nld1JU4+etzGo/6eRwP4t3Y8GrFihVy48aNM3Luv39oCy82dRGMJfnb981jf3eIpvYga755MQCrf/QyC6u9/PxTy7npvo109fby+GcX8JGfPM9nZw/Sd2gbK0siLPOGIdxNIhoiHArgIoZdHL8bnMSClfFfnzbZaEv5COHE57RQbY0QCg3SJ71U0YddJMHqps9UQmdUUOuWeE1xSCfAXaH1XJKSwba9mISkV5TikwE8pjiBpIkkFtLCSjRjwWxzEMuYCaTMZEw2FlR5OdDWSbE5jkyn8FY2UmFPEuo6gCU+SA8+4p566kLbsJoFpprTIZOCaL/2LxYAtOs0aK+kR/qYndgDxQ1am3CZRgY72HmwDUrnsHh2rfamZYZI+25iPYfIlM6ntKYRkU7SuuN1MFmoO3Ul8cEuNh3spaaugVn2MG3dvTQHBFXlfg4PpvA74bQqp2aPyQKOYta1xAj0d7F6lpWDR45QZo5Q7Cth06CblLDRF5OcWltKY7lPe12ok8zhdchMmj7nLEqihxFI9rnPYEFjA2/tOki5OcihuFZJdZF9LxlvLY93VWOx2Ykk0ly3rBRb3x6agyY2D3q4oKSfCpcAlx9cZRAPwMBhgmkrm7th0Zx6rO4SntraztlVgi2dSZLSxLWLXJijvTR3h9ibquAMeyu2UCubM/MQ3houXlgDZiuBrsPs27+HmsoqqqrrwOaCwVbt+4gHoXcvmKzQcDaYrLQFErzRJjmnMk2dK83WXokpHqDBFsIU6cZtM5HARkvcSW1tPYPSyd7WHpbXOHBZTVDSmH0fISJ7XyYcCtAm/QhfHaedMlf7Ptu3QCKi7du7T5scFNcTa9+JQ8ZpytRT4fdT6razJ1PD5kN9fGSeCUesBynTbG2PUeIrokG2Q6iTrZnZZOxeZif34yNESpp4I7OE2vIS5nkzEBvQzmFxQO2ZYLYRj4Z4ZftB5tX42dwWYWm5lVNKBCQjyHiQYOcBvIQJuhp4K+hn1eJ5FMXaIdJH+0CYffESujJultUVM6/Cy4ZD/bQHEnz4jAaCKRMPvt3OxY1O5jsCWtdjYSZhL+b1Vkl9bS3zG2fB+24Ge9FxjRNCiLellCtGPj+tHsF7gcsWVxqtEepKnKQzkud3dhrKPxhJUuzUwgpep5XtMQvd5iq2JmoInXopD/StYJO/iF98+kwAHnrrELf8UasUKXEIUrEwXzm/mt+/0cSHV8zj4Q2Hee5TpRRlAty//gj3HCjGSZwHr/ZyuKOHP6zfz+dXVfPH9fuIZCz4Khu48YJ5IDOaR+Aqg1SM/e+8zvbdeykSMRIWO1TU8JeBACvK0/yl2877V61grrmLQ0176Y70E7eXcvrcWu3HHu7SBmOZ4U3r2bjsNnzpXnan5uMv87OzpYcFfhvdA0Fml1no6AtgziSYU2qlu3+QI+0RojjoShUjEVyQCYHFR1flhTx/IE6t6OFCa5D/TV/KygY/y0wHwFkCZfO1/7P/0sLEpmcewpUJUHnO13D1N8GRt8BkIe2qoCdTxOmxPbB3qE7b5avHtfAi6NkDzS+DlPS5ZhOOxqk7sgHp8GMRKcoCO6G0mpKycjzhDmoy7TiJkIpZIVKiiUAmSaZ3P3P6+0k7ijFTw4CzgT1JJ5dXODH37KLKFcErongHuyAusuLhY9fsG3hhTz9XO9t5OHQaEsHHMtuhaydlZsmRhJcq0YeNJN2NH4KBw1xkfgeP2UTUnEIc9EDVqZj72znfdIAIc8Fbrnl8/Qe1+2uXzSPSP4hHtOMd3IO1J8AHLAkGetycbYpjI0W6txqzt5y4jLIyswVf6ULay5dyRs87FMlNsHM9pFMUuf0kTC6SoR44dBgSIfDVateTuxwWXKF5aEfeIpkRBLv6Od8cJBoog6IqPIk2ImY3A6VLeT4ouWbJLFq7emk+fJhZFjO+aC8OkSSc8eKy2uDwOm3QNZnpcC1l3aCJObYBGmIHoWkXpJNQuQS8tdDXrN1T3FkCA4d42vx+LL5qirs34khZKBUmajpepMRiwh5vgKIqhMlKvKeNWCoD8y5kW6SUxN6XqLbEeCq6kt1iNqcXBTk98ib2cAg8VeCtg4rFmiDsXwOAMDmpF2kqwr2sMoexRjxEzD5aw4Ly0gr+nKpixeL5VMYOUBfaie1QC5Q1QulsDg30UmfrpjHRgrfXAhELc0JxGmUamrbhSSf4tDlKusMD/hqoOwuAQHc75aKVWaEe2PQKrP72lI9rSgiOkQvml2OzmEikMtQWu7BZTCTTkndaBlneUMxANGnEl7VkccqIFc4qc+P32IfFd3e0DlLisuJxWDjSF8UkXNTPmsuB1wf5zTsx5tbNoei08wEIB/azt7kJu8WE86zL6Wvu5ddr13HuKSv5tzc2YDULzN2CTy+9DLtluLu9PrySb2/fTqXXziK/l1MrvPxmdzNvfG41t9/+ImnPqXz54rn8vGsjL3R2sspVyoNXnYOUkty8/u13rGFFXSlOm5lnt3fw/tIKXu3t5q3/+35Ai807ukMc6Y9SN9/PF/7rNZo6gnz7yoX8bM0+BqNJXvzERRSVe2jb28O/7V0HwNrPreauO99gZ5GfH193+pif/au7u/hcTJvt/7L+TC6/osrYdqAzyA0/eZX/+sDpfOT02gm/w6ee2cX/vHGQpn++nKbWQa79+Rvc/aEVvH9hJU5gWfY9f+uBTexsC/DSTRcbr/3zlla++uAWfv/Xq6iaW8aLzzZx16vNrP3g+/nI5hf49iUL+cXL+7n8lCpu/+hS43VvvtrMT3buovq80/jho9oSmp5F/8i/fHgxP7hnAy/m3Knsl6efyeYj/fxP+0Ee/vw5XP3zN7jrujO5bHEV3793Ay/s6uKv6ur40XXLRr23P7/WzK2HdrHlpkspdtm47aEtw3o6/eHD53LmrBL+6c7X8bls3HfjWdSN8RkJ4O77NrK7I8irX3/fhJ/ndx7byqMtLbxvQQVrmrrY9IlL+dJ/v8lsv5uPr6zn+/s3svyMc3lhVye/PNDMvhuvIJXKcO13nuVrC07hq5fMH3a8nz64mXWhPhrL3KQzkoe/dM64505nJP/w7Wf4woo5PBb8IBc3VPDv15zGx37yCnUlLn772ZXGvj+7ex2BaJIn/up8Xn1pHz/ccRH/9bHTufnBLZxW5+NrnzuLG+/dgMtm5v4bV415vq0H+7jml2u578Nn8U9/2Mp5c/3Ul7r48fN7qEo56EjFWH/l+0kLwRW3vcB3P7CIz503G4C//f7zXLa4kld2d7Nqbhk/vu50vvzLtZhM8OBN5yCAT/78Ddw2Mw98Yej8dz29i3taD7L9ax8AS37SuidNi4l3C267hfPnafH22hInly6q0r64dYcJxVOkM5JipxY39TmthOIpIzZYV+Kk3GOnJxTn3jcP8pm717HuQB9Lan3MKtVaUpS67VRnY7LhRJqPr6w3zq0njCu9DoQQeOyajrdn1zGcP89PLJnhnSOjk136QhW/Rws19IbilLntVHgd1JU4jQSZXurX3B3mzf09LPnuX4YlQSNxreyxoshOXzjBob4I1T4nQghDMOaUe7jolHJtMP3AAq5YUsUN5zZy43mzcVhNVHmHksUAVrOgokhbKzFypXYuT2xuxeuwYLeYRrWP0GvB9WNPRG2xk0QqQ284YcR43fahOZH+PiqLHKM6pD65tZ0qr4OzZ2t5jFOrvaQyklf3aIndmmLtOx5VNZQ9T1lOos+VjY3rCWOdcDxFIJrE67QaCxP1JOdYOYL/fGEP9609mH0+gdUs8GW90nPmaiu4F9do147+fvQcwUScPbuUw32RCdtZRxIpntjSxsfOqOOLF80hlZG8srubgUiSEpeNYpf2fgciSfqz3rIQAofVTI3PyaG+0d93c0+YeRUevE7LUZPFnQFtEV9diZMSl42+SIJ0RrK/O8ypVcPDJ3UlTiPfMhBJ4LCa+MDiKr571SLu//zZlLht1Picw9YFjURf01HqtuFxaAs69e+iIxDjlEoPFV4Hfo8Nt81sXM+heIrecIL6UhflXodxffRHEpS4hq6JeeWeUZVemw/3s6TGiy1PIgBKCI6LT5/dwNJaH7XFTjx2C1efUcuTW9s4lJ35Gx6BUxtcdmerSmp8TvweG91ZIXhtbw8HesIsrvHRkK1I8ntsVGcHSIfVxFXLaozznlqtXdgV2YFDH7z0gfrcuZpAjbUwS19vUOaxE02m6Q0lKPNoF+DSWp+x2lOv7OgKxvnt6wcJJ9LDStpC2VLLimzlz47WQWrHSiZmef/CSv77+jOxmk18ZfU8XvnW+wy79fdZW+zEbBI0lLo43Df2oNPUEeAvOzq58rRqzmgoZsPBPgKxpFHqmruY7GjUZJPgbQNRo+rDYx/tHFd67YQTaWOfYCzJK3u6uWJpFaZsc6KF2cHmiWzivbbYSYV3tBBoJapmXLah84wUAkv2mOFEKjtQWyhxWXHbzEZl1UghyGQkd792gMc2tRrPl7nthphddEo5fo+NL1+sxdk7hwnBxAEBvQ3IuubxSxqf29FJJJHmY8trOb2+hFK3jWe3dzAQSVLsshmDXH8kwUAkYfw29M93rPLcjkGtZNrntA5bBDYW+sBeX+Ki1G2jP5ygPysGlSMmBXUlLnrDCSKJlGaf04bDauZz582myKHZVVPsoG0gOqx6TW8DsaNtcKjyyW0zVvb3hOLUFjuZW+7myqXa71UIQaPfzYHsmHBYjwqUuqkosg8li3MiCADzKjx0BYc6DSfTGba2DHJGQ8mEn8OJooTgOHj/wkr+/JXzDYW+ftUs4qkMd67ZB2DMgrzZi6upI0ip24bTZsbvsROMpWjuCXPDObO4ZGEFHzm9xlgJ6vfY8Xvs2C0mrlxaYxwDoKLIgd8z5DHog1dbdsY2v9KD02rmQHeYVDrDnWv2GjOYSCKF02rGYzcTSaTpCScoyy5mWlLr43BfhGAsyUAkaQxML+zqBIbaJKfSGeKpDC6bxRCjcCJtDOhHw2QSw36cbrsFr8NiVHQ0lLmybTiGJ70fWHeYD/7Xa9itJm44t5GzGkvZ0TbIx37xJlf+9DWCsaQxYx754x8LvQqmbSA6pkegox9LH6zWNHWRSGX44NJqY5/Zfjc2s4lX93Tjc1qZXe42vL5cQrEUHodlWIWMLgr+7PfQ6Ne8wlA8ZczYhRDUlbiMAc8oHw0N3aciGE8Z27uDcfxFQzPMCq+Djd++lA8uqcZqFnQGtb5GgVjqqB7BwmovRQ4LD204Mu4Ctsc2t1Jb7GRlYylmk+DKpdU8ta2dRDpDictq5Mv6I0n6w8lhpY9VPseobq/pjKQnFKfS68DrsB7VI9AFsq7ESYnbRl84MaxyKpe6Eu17b+2PjhqAdap9TuKpzLD+SOsP9PHk1nZe3t1NXzi7FsJlw+OwEoyl6AkmqCtx8sLfXzQszNXodxsegb4uYk55VgiCWiuTgUgCnzPHI8iWpepeQVN7kHgqY9xLPV8oIZgCFlZ7uWRhJc9m+5MPeQTa/7vag0ZLBX9OGOBz583mNzesZGG1l4ZsaMjvsWE2CR7+4jl856pFo871q8+cyTcuPQUY7REUu2zM9rs50BNi85EB/uO5Pfw+2/Y6nF3J6rRatJvDhOJGmEJvuNY2EGMgmuTMnNmHzWIywkZ6awq33UyFd+h9jFleOEmuPqPWKGnUwyAjO5I++vYRTqks4uVvXsypVV7Oml2WbY0QIpJI88z2Dp7c2saZs0pwWM2jzjES3YNpHSYEo1+ni50uBM9s66CiyD7s87GYTdxxzWnc8Ven8cY/rcbrsFJepHkEubPKUDyF227Bac0VguEeQWOZG5PQvIfc0E1didNolaELQW8oQSYjjTvX9YTixJJpjvRHqCt2jXovJpMWfusMxIwQ5tGEwGwS/L8rFvLWgV7++u71o8SgKxjj9b3dfPSMWsND+vaHFnL7R5eysrGEVXPK8DmtOKwm2gai9EcSxiQJNKEdeVe43lCcjNQ+e5/Tml0BPH6rZ10Aa4qdlGZDQ3oOzu8ZXm+fW0Kql7eORP+d5oZD9bBfZyDGQCSh5ehsZop0jyAcx19kZ+Qa2dllblr6tW4A77QM4LCamF/hoaLIQX8kyWA0STItKRnhEcCQELx9SPPGlEfwLuEXn17OtWfWIcTQwOh1aAN1TyhuhCP0Wcpsv9uYAcLQYjV9lr6svnjMH+qZs0qM17myg4q+EEmfkTb3hI3B+7XsoqRIXGty5rKZiSRS9IUThhDUZGf0ezqDpDOSZfXFWEyCIoeFDy+rYXurtihJv5+B2z4UGoKhH8/x8L2PLOH6VbOAHCEYsRCnuSfM8lklxiBy5qwSzmos5WefXM6sMhc/em43zd1hPpGTT5kIr9OC22amdSBq3JRmrNCQvgK6Oxgnnkrz8p4uLl8yFBbSufqMWq5bWW8co7zITjyV4f/cv4n/XXsQ0AbwIrsFh3XoJ+ccIQQ1xdmOsvH0KCFo7dfCFaFYCofVRCq7KG3zkaGWBEf6IhzujQy7roa/Hy0koc+yjyYEoPXA+cl1p7P+YB+/frV52LYXd3WRkQwLX9otZj51dgOPfOlcltUXYzIJ5vi1uLcWDx86Z5XXQSieIhTXWnIk0xljoVWF12FMpPrCCe5cs9dordAxGDNEtqU/QkWRHYfVTKlbW7Og54tG5l7qsx5BS39EEyXn6IVZ1TlhQx29lUrHYIy+cMLwajx2C6FYip5gHP8Yi7xm+7WWNAd7w7xzZIAlNT4sZpMxidLbf+QKUn2JE5vZZKx2fmpbO3PK3cZvNF8oIZgibBZtZrjllsuMGacv5wvWxUGfpVx0yvB+SbPKXLhsZiNENBlMJoHbZjaSxV6Hhbl+N0f6ImzKzhTfPtRPOJ4inEjjsplx2cwMRpNEEmlDdPRQkx4CKi+yc1qdj4+cXsPyhhICsRRH+qLG4iuXzYzfYzPWcp2IR5DLWB5BXzjBQCTJnJzBzWkz8/CXzuHK06q5+vRaOgNxiuwWrjytetQxx0IIQU2x0wgNmQTDZuo6usAd7o1ku3ROzkXXBeSZ7R08ku1F1BmI4ffYR3gEWeHIfg9VPocRdx6M5AqBi2A8RU8oQSKdobFM+yx6QnE2Hx4wJhxvHegjlZHDPqtcqryaR3AsQgCa0F2xpIpfvLx/WCjnxV1d1JU4OaXSM+Hr51XoQpAclhjV8zkdg1q7jluf3Gl4XxVFdiPH9tyODv7juT386Z02DvSEOe/f1/DCLq3KqqU/aoR8St02pByaTftHCIHfY8dmMXFkotBQTjNE0L43vaVEZzA+LLnrcVjoiyQIxFKjwlAAZ2ULCp7f2cmOtgDL6ouN9wZD4aJcL8liNjGn3M3erhAHesJsONjPtWfWj/I2pholBFOIEGLY4J8b39fFYV6Fh+UNxVxz5vCiPZfNwovfuIhPnNVwTOd02y1Ge2Nv1iPISFizq5Nil5VkWvJWcy+RRDY0YTMb91TWk8WVRXZMYqjjY6nbysNfPId//fASlmZXWG5vGxwKo9gsWMwmw6MYawXy8VDsslJktwzrGNqc7Uczt3zsweajZ2iloh85o2ZYIvZoaEIQM5LfY/3QXDYLNT4HzT1ho0HaHP/Egx5oK5pvvXoJVy2rya68lhzsDdPod+PIyRG4s4/rS11cv6qByxZV4bZbCMaSBONDMXx9BqknxnUhONgbYXdn0AitvZGduY7nEVSOEALvJIUA4OYPLiQtJT9dsxfQWji8sa+H1adWHHWQmlfhoXUgSiKVGRUaAjjcF2ZrywBbjgwM8wj096+3ot5woI/X9naTzkiastfqkf6IEfIpyV6PezuD2CwmikZ4eSaToLHMRVNHMBsaGj2L97vt2MwmI++mewOLa7x0juER6HcoGyk6oH2vS2q93P36AeKpDKdlVznrE6dNh7T3VTzie5hboa3M//VrzZgEfGz5xOXQU4ESgjyS+0PTv/wih5XH/s95Yy5hr/Y5sZqP7SvRwxHazWtMzM4OVOFEmo+vqMdpNfPqnm4iOR6Bju6dWMwmKooc7GzTwknFLhsWswmzSXBKlQeLSbC9ddCoPHLZ9ZCGA5vFNKwk8kQQQlBf6hrmEej9aPQ7vo2k0e/mgc+fzbc+cOoxnSvXI/A4xheQuRVaczRjEB5nkM3FYTVz/apZLKvzEYyl2N0ZJJbM0FjmwpGzvkMPDZlNgluvXsq8Cg9uu4WOQBwph64fPcShi6Juw192dCAlXL6kCotJ8OZ+XQjG9iorvHYCsZQx656sRwDaoHbRKeVG2e7a5l6iyTSrT6046mv1uDdokwwdvdT3zX29Ws6nJ2zYVu6xGxOpLVnvdsPBftbu7wU0TyCVztA+EKO+NOsRZAf23Z1Byj2jY/YA588rZ+3+HhLpzJgegckkqPI5DC/7pd1d+D12LjqlnO5QnN7wUOVTUc51M95v4Iol1UbBht736JTKIrwOi1GMUTLitR9eVkNfOMED6w5z0SnlkyqAOFGUEOQRt82MORtPPpE4+oTnyAqB/qOZnTNQLZ9Vwqo5pby6t0er/7dZcObMmkvdQ7OY6mKH0Qwv1323W8zMq/CwuyNoVPPo4lPltVPjc4yKmZ8IDSOEYH9PCJvZZMz6xuLcef5jGtQAaosd9IYT9IYTY1YM6cwt99DcHaa5O4TfYzum8+gz91eyd0qbVebWFv1lP6+xPBiP3UJ7Nj6tC4EeStDFSA/9PLapBb/Hxjlz/FT5HARiWolq+RhhCsBo9qc3DTzWz+zUqiIO9ISJp9Ks2dWF02o2SkwnIlcIxvII9Fl3MKbdnKfUbcNmMRn26U3hWgeixl3njvRHaB/U1hDUZ68Nfabe0h8dlSjWuWRhhdG9c+RMXKfa56B1IEosmealpi4uXVRJtc9BOiM50hcZ5hHojOURAIa35nNajTygOXvnQ90zG2nHBxZX8ezXLuS6FXV87ZJTxjzuVKOEII8IIYz47US19ieCXu2i/2i0G6xoF+qSWh8XzC/nQE+YQ31hXHazkWCG4bOYmpzwTsmImVJ5kV1bfJVtVqcPYH9/6QJu9NgdKgAAD5tJREFUy1k9OxU0lLk40h81Okk2d4eZVeYyBs+pQvfQNhzsO4oQuAnFU7zV3DepsFAu+g//lWzVSWOZGyGEkSdw2UbnJdx2sxEe0b/Tco82YOoDYm2JE4tJkJHwpYvm4rSZjTh5o989bqhGH3j3ZmPTxyoEC6qKjM6gb+zr4Zy5ZZOq0ppV5jLuCZ07yXDazHgdlmHrXtYf6DOEL9ej1vMQ+i0+W/qjRox9fnZbbmnqWDF7gJWzS42Z/FgeAWiFGluODHD/usNEEmmuWFJlfHYZybAcgc544ju33MOSWi9nzS4d9r2cN2+oCaRvDDvmlnu445plRl4h3yghyDPebHfJ8S7ME0WflXhzFgfN9rspcVmp8Tm4MJuUjiUzuLNVQzplObMmfS2ASQzPbYA2ixuIJEaVWi6t8w27oKeChlIXiVSGzmzXzwM94XHDQifCsvpiSlxW6kpcfHKCaqM52dzE4b7IMG9rMtSXuhBCExuLSRheoT54juy6CcPXM+gDtdepdXvVPQKvw0qZx0Z5kd2ouKrNloxOZKPe9XXjoX7MJjFmpdRE6Ct1X9/bQ3NP2FhdfTTsFjOzst7RyEmGnjDW4/n9kaSRbM8VqiuWVBv7fHBJNW0DUSOJO69Csyt3YB9ZMaRjNZu4eEFF9vhjew03njcbsxD829O78DmtnDO3bFh4ZiyPoGwcDwTgd39z9qh2IPriT5fNPKodzEyghCDPeB1Wqn3OKQ2f5DIyNATwN+fP4RuXLUAIwdyc0jOX3WwMPq4Rq1z1yiGf0zrK1hKXlf5I0hCCY0nKHiv6LLo5uyjuUG/YGIynkrnlHjZ/5zKe+eoFEyboc5PUxypIDquZaq+DZFpSX+oy2hHrJaTucUJDOvpAKISgvMhu3NjE47DwzcsW8KNrlxmionsEEwlBfamLBZVFWEymSSV5R9JY5sZmMXH/Om1tyspJCgEMfY4jE7T6AHvePD9Ws2aP7hHYLSZs2c9sfqWHVXPLmFvuZuXsUlIZyWt7u6n02o3PyWE1Gwn4iSZeH1xShRDje+lVPgfXrawjlZFcsrASq9k0bMW6HtPXPYuRv6WRFLtsoyZXc8vdVHrt44anphvVdC7PzK/wGFU9+UAXgtzZkx6X5P+3d+8xUtVXAMe/Z2dnd3ZndtknsOEly8LuahFWV4gUcEFRbDU2PjBqorYJmpKahtham7T2lbbWxNrYpE1MTUyaNGrUxtoUTdOW+Kgt0vhIxaYiUnkLCIvI8lpO/7j3zs7M3ll2lpm5d/eeT0IYZgY4+5s799zf7/x+v4tzElk+r5Un39jh9gic9+dewXjJotFnJoW3p7x3t6ikz5VssXzO3Yf9rR2HmdZQw6nB/NMhy2FKfTXJqhifnRwsuEcATl1gd//xdIIDZ6qqCFlrCjx+PQJwxqC9O6Clqiu5qTe7FzPNGxpqzh9jIh7jpfXLC/4ZPJWxCjpaU2zZc4SaeCz9WY1Gd1sdL/93/7DhGK9g3NVWx9b9R9n68dF0z0VEqK+Jc+DoCdpbUvzshgs5cXqQDz52EuIb2w9xaU6NojFZxWcn89cIwPl+vHLfihHrTl/t6+DV9w+k9/pqSTkz65yhIednSFXH068VSkS48eLp6ftcB80SQYk9vGYBpbzlw9DQUP4ri2VznUSQOWuoOZl98Hpj5n7jpt6Bv+fwANWVFekr21JoTDqro9/acTh9ZZh7k45yEhHmTE7xzs7+MQ1RnddSy+vbDmadoGuqYm4yGH5F7tcjgKGrZMiereKZP20SVbEKFswobVt1Ta1jy54j9MxsKGgTtLXL27ncvbrO5F1pz5tSx+yWI2z9+GjWYsX6mkoOHD3B7JZkujfrTdkcPKPp+oCnOVnlFIvzDA0B6W07RjKtoYaN3xzadTVW4fTK9h05MaxGMFLSGUmhM91KyRJBiTm7cpbu3/eGF0ZKBEvnttDemqS7rT79Zcqd7uYtpPHtEbjv3XV4YMTCarH0zGjg5fcPkHBv5djdNrabcBTLnNYU/97Vn94GpBDe2HhmjyARj/kWimGot1VZIVnvydyYrtrnBNzdVs+7P7yq4OnHhep06wSLChgWAmfocqFP4dMb0uqaWpfu+U3J2L6kPhFnWkNNVj3F2e3Wud3GvCnZx4Z3rJaiJjfV3RIjt0bQXKL6XzlZIhjnvMJt/Qhz4SfVxPnrvX0A6S2Fc4eGWpLVxGPiu8jGe27noYG8J7BiWjizgefe3MWft+zlC/PbSr6q8mxuv3QWF4xxG2BvpXhmjyARj/kWiiF7qC/z5/ZmpaQS/ovfgJInASB9Ml9apEkC1y2cxtRJNbS3ptJDb60ZPYK+zlaOn8oeWq2qrKCtPsHu/uPpewd7vLUE+YrF58IpYvcP9QiqszcNHM8sEYxzoxkaylQb97+KqagQ1vV1cNGs4ZtbeV+u3YcHsuaEl0rPDCeG46fODNuKIwg9MxvHvOlXX+dk7lvdyZKOobHsKXXVDJz0v61oyqfmA0MntkJn+hTb4vZmNn6jb1QL60YjEY+lP+OrLpjK9oPH0itwgbzz6Kc31bqJoHw9Am/b+cyFgCu7JrNkztnXUoRdIEeVOJc0q1V1QxD//0TiVyweSSpRyeLZTb5T/9av8v/SeXWD02e0LD2CrrY6qisrODl4pmhXnkFJxGOs6+vIeu6Ba89PL2rKlcyT2MOSCGB0q6vHojFZxf1Xj27cfN6UFHv7jw+bg79sbgs7Dx0bsYc8Vuv65gzbzyrzDmjjWdmPKhF5EGgAtgIb3OcEuB7YCzSp6gvljmu88k4Yo52GFqsQnro7/63//GQugS9HjSAeq+DiWY0cPzU4IcZfc9Ul8n9W+RK7lwj8CsVR9K3VXXxtxfB7JPR1Tk6vEyi2yfWJ9BqHiSaIo+olVf1bznPXAftU9TURWSsi3ar6XgCxjTtL5jTz0A0X0nteYcW7QiSrYsRjwqnB8vQIAH55Sw8lnGwVWvmGhiaHqEcQBnWJ+IgJ1RQmiAVlt4rI027PwHMZsMN9vAMYNtlZRO4Skc0isnn//v3liHNciMcqWHPJjKJvwZBJZKiIXI4eATg1jIlQhCtU7pYhHq8t7ORnSqHsiUBV16rqGiAlIt3u0+L+Sr/N5+89pqq9qtrb2hp8ATFqvIKx32pYUzx+W4aAU2toTlZl7adjTLEE+a3eBnjbTG4E2oHtwHTglWBCMvl4BeNan1s6muKpS8RZPLvJd6jviS8vyppjb0yxlDURiMgi4ApgE06xeJ2I/BF4HrhZRBYDu60+ED6N1iMoi5GK+fOnB7fC2kxsZf1Wq+omnCTg+UPG4yfLGYspTKN7Q5Fy1QiMMeVju4+aURnqEdjQkDETjSUCMypeIqi1HoExE44lAjMqXrHYegTGTDyWCMyoeNMWrUZgzMRjicCMyuc7Wrh31TwuGuPma8aY8LLLOzMqiXiMey6fG3QYxpgSsB6BMcZEnCUCY4yJOEsExhgTcZYIjDEm4iwRGGNMxFkiMMaYiLNEYIwxEWeJwBhjIk5Ux9+dYUVkP/C/Mf71FuBAEcMpFourcGGNzeIqTFjjgvDGNta4ZqnqsFs8jstEcC5EZLOq9gYdRy6Lq3Bhjc3iKkxY44LwxlbsuGxoyBhjIs4SgTHGRFwUE8FjQQeQh8VVuLDGZnEVJqxxQXhjK2pckasRGGOMyRbFHoExxpgMlgiMMSbiLBGEjIjEReTKEMQhInJ10HGcTVjaa7wSkUkisjTgGMbNZxiG9iqFyNyhTEQEuB7YCzSp6gsBxzMJuAdoAo4BDwBPAQeBPwUYGiLyINAAbBWRTcAy4DBwUlX/HlBMXwd63D/OANYD3yXg9hKRi4CfqOpqEWkmp61EZAHO4p9a4G1V/SiAuBYA1wBzgRdU9VkRWQLcASjwi3LE5BNXBTnHfEja69dAjfvSDOBqoJcyt5fPOeIRSnV8qWokfgFfApa6j9cC3QHH08tQsf73wDRgYdDt5MazIuPxT4G4+/ghoDKgmGozHt8GNAbdXjgniw7gxXxtBTyc8f6fBxTXJe7vkvHcinLEcpa4hn2GIWmvzGPt1gDbK/cc8Uipjq8oDQ1dBuxwH+8AlgcYC6q6WVVVRGI4S8VjwHoReVFEbgwyNuBWEXna7Rl0quop9/kzwJwgAlLVYwAikgKOA3UE3F6qOqCqWzOeym2rC3BOdp7ZQcSlqm+4D2cCr7uPm0TkV277nR9EXOR8hu4VcBjayzvWlhNse+WeI2aV6viKUiIQ95cnLPNmbwHuV9WPVPUO4IvA3UEGpKprVXUNkAKSuS8HEFKm1cBLYWqvDH7fJ/F5ruxEpAZYBfwIQFWfVdV1wFeAbwcRU57PMBTt5WpX1Q8h8Pa6BbifEh5fUUoEG4F29/F04JXgQnGIyLXA86p6UEQaAVR1EHgv2MjStgG73ZMIOAfdtgDjAahR1aPeH0LWXv/Jaat3gU8zXg+k7USkFrhSVX8D1IpIPOPlfcD+IOLyeJ+hqvYTgvYCEJFq4DOfl8raXpnnCGBfqY6vyCwoc4vFNwMfAs2qGnRB9j6gC/gEmAx8AOwEdgOfqOo/A4prEXAFsAmnAPUasNKNa1BV/xFEXG5sSWC5qm4QkduBOMG3VzfwLE4xtp+cthKRHpxiXgzYouUrfnpxXQv8GNiF05tbgNOr+g7wDs74+F9UdV+Z47oGWErOZxiC9rpGVbeJyErgLVX9xH39e5S5vXzOEY+7vxf9+IpMIjDGGOMvSkNDxhhjfFgiMMaYiLNEYIwxEWeJwBhjIs4SgTHGRJwlAmOMiThLBMaUiYgsdeeGGxMqlgiMyUNE5orIuyJyg4j0ishiEfn+OfyTTTiL9IwJFUsExuShqu/jbCfwL1XdjLMq/dFz+CffKUpgxhRZZO5HYMw56BGRqcCNwA9E5Dngd8CFQJuqrhWRq9z39gOLVPVRd4/7lTj7whwFNgCzReRO4CbgNlU9XOafxZhhLBEYc3Zvqup2ERlQ1U9F5IiqPgM8IyK/FZFOYJ2qXgfO9sUicinOzXPuzNjW+Dxgj6o+ISJVwHxCsPmhMTY0ZMwoqerbIlJH9h7w+3B6AacznjuDswnY6Zz3gnMvBYCT7nuMCZz1CIzJQ0Q6cG7ZuUxEpuMM8dwFxEVkFXAK2Kyqe0Xkcfcez4eAY6r6qogcAh4WkdeAt3Hu79ApIg1AJ5DA2R7dmEDZ7qPGFEhEnlDVO8fw9ypwtoIWVT1T9MCMGSPrERhTJhknf7v6MqFiNQJjCiAiLUCHiCwNOhZjisWGhowpgDu8A2Rd4RszrlkiMMaYiLOhIWOMiThLBMYYE3GWCIwxJuIsERhjTMT9H3Ak2pHlYO/zAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot(train_mae_losses, test_mae_losses)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.2"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": true,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
